本文咱们使用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 |
总结
从上面的结果看来,需求已实现。