开发中经常会遇到,分组查询最新数据的问题,下面的解决方案可以进行处理解决。
场景:
有一个考试提交记录表,需要获取相同学员提交的最新考试提交数据进行展示。
如图所示,学员“虞姬”有三条提交记录,其中提交时间为“2024-03-12 13:09:35”的数据为最新的一条。所以我们需要只获取这条最新的提交数据。
方法一:子查询与MAX()函数
SELECT*FROM exam_submit t1
WHERE t1.id =(SELECTMAX(id)FROM exam_submit t2
WHERE t1.user_id = t2.user_id
)
方法二:子查询与limit结合
如果主键id是uuid用Max()函数可能有问题,可以改造一下按照下面方式查询处理。
SELECT*FROM exam_submit t1
WHERE t1.id =(select id from exam_submitt2
where t1.user_id = t2.user_id
orderby submit_time desclimit1)
方法三:join与Max()函数
SELECT t1.*FROM exam_submit t1
join(select user_id,max(submit_time)as submit_time
from exam_submit sub groupby sub.user_id
) t2 on t1.user_id = t2.user_id and t1.submit_time = t2.submit_time
方式四:ROW_NUMBER()函数
select*from(select sub.*,
row_number()over(partitionby user_id orderby submit_time desc)as rowNum
from exam_submit sub
) t1 where t1.rowNum =1
方式五:join与ROW_NUMBER()函数
SELECT t1.*FROM exam_submit t1
join(select sub.*,
row_number()over(partitionby user_id orderby submit_time desc)as rowNum
from exam_submit sub
) t2 on t1.id = t2.id
where t2.rowNum =1
版权归原作者 勿 言 所有, 如有侵权,请联系我们删除。