本文咱们使用mysql实现开窗函数row_number() over (partition by xxx,xxx order by xxx),废话不多说,直接开干
准备数据
select * from test_biz_policy_policy;
| platform_id(平台id) | publish_time(政策发布时间) | policy_name(政策名称) | 
|---|---|---|
| 2 | 2019-04-01 15:11:06 | test0 | 
| 2 | 2019-04-01 19:11:06 | test9 | 
| 2 | 2019-04-01 19:11:06 | test8 | 
| 2 | 2019-04-01 18:11:06 | test7 | 
| 2 | 2019-04-01 15:11:06 | test1 | 
| 2 | 2019-04-01 15:11:06 | test2 | 
| 2 | 2019-04-01 16:11:06 | test3 | 
| 2 | 2019-04-01 16:11:06 | test4 | 
| 2 | 2019-04-01 16:11:06 | test5 | 
| 2 | 2019-04-01 17:11:06 | test6 | 
| 8 | 2019-04-02 19:17:31 | fengyu | 
| 8 | 2019-04-02 19:17:31 | 新建政策1111111 | 
| 8 | 2019-04-02 19:17:31 | 1218测试 | 
| 8 | 2019-04-02 19:17:31 | xxx | 
| 8 | 2019-04-02 19:17:31 | ccc | 
| 8 | 2019-04-02 19:17:31 | 测试114 | 
| 8 | 2019-04-02 19:17:31 | 测试mmm | 
| 8 | 2019-04-02 19:17:31 | k k k k k k k | 
| 8 | 2019-04-02 19:17:31 | k k k k k k k明明 | 
| 8 | 2019-04-02 19:17:31 | ceshi111 | 
需求
简而言之,就是以「平台id」,「政策发布时间」分组,根据「政策名称」进行排序,取政策前三名。
代码
SELECT
    t.platform_id,
    t.publish_time,
    t.policy_name,
    t.rank_no 
FROM
    (
    SELECT
        a.platform_id,
        a.publish_time,
        a.policy_name,
    IF
        (
            @str1 = a.platform_id 
            AND @str2 = a.publish_time,
            @rank := @rank + 1,
            @rank := 1 
        ) AS rank_no,
        @str1 := a.platform_id,
        @str2 := a.publish_time 
    FROM
        (
        SELECT
            platform_id,
            publish_time,
            policy_name 
        FROM
            test_biz_policy_policy 
        ORDER BY
            platform_id,
            publish_time,
            policy_name ASC 
        ) a,
        (
        SELECT
            @str1 := 0,
            @str2 := NULL,
            @rank := 0 
        ) tmp 
    ) t 
WHERE
    t.rank_no <= 5
结果
| platform_id(平台id) | publish_time(政策发布时间) | policy_name(政策名称) | 
|---|---|---|
| 2 | 2019-04-01 15:11:06 | test0 | 
| 2 | 2019-04-01 15:11:06 | test1 | 
| 2 | 2019-04-01 15:11:06 | test2 | 
| 2 | 2019-04-01 16:11:06 | test3 | 
| 2 | 2019-04-01 16:11:06 | test4 | 
| 2 | 2019-04-01 16:11:06 | test5 | 
| 2 | 2019-04-01 17:11:06 | test6 | 
| 2 | 2019-04-01 18:11:06 | test7 | 
| 2 | 2019-04-01 19:11:06 | test8 | 
| 2 | 2019-04-01 19:11:06 | test9 | 
| 8 | 2019-04-02 19:17:31 | 1218测试 | 
| 8 | 2019-04-02 19:17:31 | ccc | 
| 8 | 2019-04-02 19:17:31 | ceshi111 | 
| 8 | 2019-04-02 19:17:31 | fengyu | 
| 8 | 2019-04-02 19:17:31 | k k k k k k k | 
总结
从上面的结果看来,需求已实现。