小记:MySQL 实现 ROW_NUMBER() OVER (PARTITION BY ORDER BY ) 功能

  • 需求:由于项目需求原因,需要从MySQL中获取人员最新在职信息,将查询出来的数据通过datax或kettle 工具,导入另一个业务库中,现发现MySQL中无ROW_NUMBER() OVER (PARTITION BY ORDER BY ) 函数,现记录下MySQL中实现该函数的sql
  • 用户自定义变量的使用 官方文档
mysql> SET @v1 = X'41';
mysql> SET @v2 = X'41'+0;
mysql> SET @v3 = CAST(X'41' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| A    |   65 |   65 |
+------+------+------+
mysql> SET @v1 = b'1000001';
mysql> SET @v2 = b'1000001'+0;
mysql> SET @v3 = CAST(b'1000001' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| A    |   65 |   65 |
+------+------+------+
  • 实现ROW_NUMBER() OVER (PARTITION BY ORDER BY ) 函数
		SELECT
				t.real_name,
				t.id_card_no,
				t.is_job,
				t.last_modify_time,
				if(@groups=t.id_card_no,@rank:=@rank+1,@rank:=1) as rank, --排序
				@groups:=t.id_card_no as tt_id_card_no  --分组
			FROM (	
					select
						
							t.real_name,
							t.id_card_no,
							t.is_job,
							t.last_modify_time
					from 
						labourer_resume t 
					where t.is_deleted =1 and t.source_pid != 0
					ORDER BY id_card_no,t.is_job DESC,t.last_modify_time DESC --先排序
			) t JOIN (SELECT @groups := null ,@rank:=0 ) r  --自定义两个变量用于分组 排序
  • 查询结果
real_name  		id_card_no     is_job  	last_modify_time  	  rank 	 tt_id_card_no  
陈*52212*****012012	1		2020-01-06 21:50:52		1	52212*****012012*52212*****012012	0		2019-11-09 11:26:48		2	52212*****012012*52212*****630361	0		2020-01-06 19:45:11		1	52212*****630361*52212*****630361	0		2019-10-30 10:53:48		2	52212*****630361
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值