MySQL 使用变量和窗口函数 完成获取符合特定属性的一条

情景:所有用户最新的一条数据
SQL如下:

select * from (
	SELECT  id,
			user_id,
			user_name,
			update_time,
            (@row_number:=IF(@prev_user = user_id, @row_number + 1, 1)) AS rn,
            @prev_user := user_id AS dummy
    FROM user_learn where 1=1
    ORDER BY user_id desc,update_time desc
	) AS subquery
WHERE rn = 1 

字段解释:
id:操作记录的id
user_id:用户id; 注意放的位置,可以根据相应的业务进行修改。
user_name:用户名称
update_time :修改时间;

sql语句解释:
1、@prev_user := user_id; 赋值
2、@row_number:=IF(@prev_user = user_id, @row_number + 1, 1); 不同用户id下变量row_number初始值是1,同一用户下依次递增(1、2、3、4、…)
3、ORDER BY user_id desc,update_time desc; 根据日期进行倒叙,目的是为了获取最新日期的一条数据。
整体语义:会在原有的数据里增加一个行标记变量,当是同一个用户id 会根据order by字段后的特定排序字段(update_time )依次递增(1、2、3、4、…),外层的WHERE rn = 1 就会筛选出同一用户下最新的一条数据。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值