Mysql:在历史记录表中每个键选择最新项目的算法

时间:2018-11-08 14:28:32

标签: mysql

我正面临算法问题。 我有一个表,这是我没有建立的历史记录表。该表具有这种结构:

id-文件-评论日期-评论-作者
1-1-20180901-嗨-2
2-1-20170901-你好-3
3-2---
4-2-20160504-大家好-4

每个文件可以有多个注释,但是我只想为每个文件选择一行,记录最近的注释。

我尝试了一组不同的分组组合,具有最大,最大,最大...但无法获得预期的结果。

我想这只是一个窍门,但我不知道...

任何帮助都将受到欢迎!

谢谢 文森特

1 个答案:

答案 0 :(得分:1)

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

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_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