mysql:在历史表中为每个键选择最新项的算法

nxowjjhe  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(265)

我面临一个算法问题。我有一个表,这是我没有建立的历史表。表具有这种结构:
id-文件-评论日期-评论-作者
1-1-20180901-嗨-2
2-1-20170901-你好-3
3 - 2 - - -
4-2-20160504-大家好-4
每个文件都可以有多个注解,但我只想为每个记录了最新注解的文件选择一行。
我尝试了一组不同的组合,有,在哪里,马克斯。。。但没能达到预期的效果。
我想这只是个骗局,但我不。。。
欢迎任何帮助!
谢谢你,文森特

mzsu5hc0

mzsu5hc01#

您可以通过排除联接来实现这一点:

SELECT c1.id, c1.file, c1.comment_date, c1.comment, c1.author
FROM comments c1
LEFT JOIN comments c2
ON c2.file = c1.file AND c2.id > c1.id 
WHERE c2.id IS NULL

我用的是 id 列来确定每个文件的最新行,而不是 comment_date 列,因为可能有重复的行 comment_date 每个文件的值。
如果必须使用comment\u date,则可以使用返回到 id 如果有重复日期:

SELECT c1.id, c1.file, c1.comment_date, c1.comment, c1.author
FROM comments c1
LEFT JOIN comments c2
ON c2.file = c1.file AND c2.comment_date > c1.comment_date AND c2.id > c1.id 
WHERE c2.id IS NULL

相关问题