背景:
现在有一张mysql表,有id,beginTime,userName几个字段,现在需要找出每个用户最新的beginTime那条数据
方法一:使用max函数方法
SELECT id,`userName`, MAX(`beginTime`) FROM login_record GROUP BY `userName`;
方法二:使用窗口函数row_number,需要mysql8
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY userName ORDER BY beginTime DESC) AS rn
FROM login_record
) t
WHERE t.rn = 1;
方法三:如果mysql不是8版本,可以使用变量模拟窗口函数:
SELECT *
FROM (
SELECT *,
(@row_number:=IF(@prev_user = userName, @row_number + 1, 1)) AS rn,
@prev_user := userName AS dummy
FROM login_record
ORDER BY userName, beginTime DESC
) AS subquery
WHERE rn = 1;