实现效果:去重—取最新的—排序
例子 : 按用户ID获取历史记录中某个人的记录,要求非重复的且每条只获取最新的,同时按添加时间倒序排列的
实现 :SELECT *
FROM (
SELECT *
FROM historys
WHERE types_id=1
ORDER BY `created` DESC
) AS B
GROUP BY B.data_id
order by B.created DESC
之前在做一个视频的历史播放记录时遇到了去重后倒序排序的功能需求
然后直接写了
SELECT H.*
FROM `historys` AS H
WHERE H.`users_id` = '259' AND H.`types_id` = 1
GROUP BY H.`data_id`
ORDER BY H.`id` ASC
本来以为没问题,结果后来检查时发现是有分组了(实现了去重),但没有把最新的历史记录排在前面
如图,分组了,也倒序排序了,但是获取的记录并不是 data_id 的最新的那条
需要的真实顺序应该是24、23、29、30。。。
sql语句修改为SELECT A.*
FROM (
SELECT H.*
FROM `historys` AS H
WHERE H.`users_id` = '259' AND H.`types_id` = 1
ORDER BY H.`id` DESC
) AS A
GROUP BY A.data_id
ORDER BY A.id DESC
结果为
这才是正确的结果
本文由【waitig】发表在等英博客 本文固定链接:Mysql 数据记录去重后按字段排序 欢迎关注本站官方公众号,每日都有干货分享!
点赞 (0)赏分享 (0)