情景:所有用户最新的一条数据
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 就会筛选出同一用户下最新的一条数据。