MySql实现ROW_NUMBER()开窗函数

本文咱们使用mysql实现开窗函数row_number() over (partition by xxx,xxx order by xxx),废话不多说,直接开干

准备数据
select * from test_biz_policy_policy;
platform_id(平台id)publish_time(政策发布时间)policy_name(政策名称)
22019-04-01 15:11:06test0
22019-04-01 19:11:06test9
22019-04-01 19:11:06test8
22019-04-01 18:11:06test7
22019-04-01 15:11:06test1
22019-04-01 15:11:06test2
22019-04-01 16:11:06test3
22019-04-01 16:11:06test4
22019-04-01 16:11:06test5
22019-04-01 17:11:06test6
82019-04-02 19:17:31fengyu
82019-04-02 19:17:31新建政策1111111
82019-04-02 19:17:311218测试
82019-04-02 19:17:31xxx
82019-04-02 19:17:31ccc
82019-04-02 19:17:31测试114
82019-04-02 19:17:31测试mmm
82019-04-02 19:17:31k k k k k k k
82019-04-02 19:17:31k k k k k k k明明
82019-04-02 19:17:31ceshi111
需求

简而言之,就是以「平台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(政策名称)
22019-04-01 15:11:06test0
22019-04-01 15:11:06test1
22019-04-01 15:11:06test2
22019-04-01 16:11:06test3
22019-04-01 16:11:06test4
22019-04-01 16:11:06test5
22019-04-01 17:11:06test6
22019-04-01 18:11:06test7
22019-04-01 19:11:06test8
22019-04-01 19:11:06test9
82019-04-02 19:17:311218测试
82019-04-02 19:17:31ccc
82019-04-02 19:17:31ceshi111
82019-04-02 19:17:31fengyu
82019-04-02 19:17:31k k k k k k k
总结

从上面的结果看来,需求已实现。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值