MySQL如何查询重复值仅返回1条 优先取对应日期最新的记录
MySQL 去重保留最新日期行查询方案
假设你的表名为fruit_records,可根据实际表名替换。
方案1:MySQL 8.0及以上版本(推荐)
使用窗口函数实现,逻辑清晰效率高:
SELECT id, fruit, `date` FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY fruit ORDER BY `date` DESC) AS rn FROM fruit_records ) AS t WHERE rn = 1;
逻辑说明:
- 用
PARTITION BY fruit将相同水果的记录划分为同一组 - 每组内按
date倒序排序,最新的日期排在最前 ROW_NUMBER()为每组内的行按排序结果生成序号- 筛选序号为1的行,即可得到每种水果最新日期的唯一记录
方案2:MySQL 5.x兼容方案
针对不支持窗口函数的低版本MySQL,可使用分组关联实现:
SELECT t1.id, t1.fruit, t1.`date` FROM fruit_records t1 INNER JOIN ( SELECT fruit, MAX(`date`) AS max_date FROM fruit_records GROUP BY fruit ) t2 ON t1.fruit = t2.fruit AND t1.`date` = t2.max_date;
逻辑说明:
- 先通过子查询统计出每种水果对应的最大日期
- 将原表和统计结果关联,匹配水果名称和对应的最大日期,即可得到每种水果最新的记录
- 若同一种水果存在多条相同最大日期的记录,只需在查询末尾加上
GROUP BY t1.fruit即可仅保留一条
内容的提问来源于stack exchange,提问作者Kevin Lindmark
相关产品推荐
相关产品推荐

