我正面临算法问题。 我有一个表,这是我没有建立的历史记录表。该表具有这种结构:
id-文件-评论日期-评论-作者
1-1-20180901-嗨-2
2-1-20170901-你好-3
3-2---
4-2-20160504-大家好-4
每个文件可以有多个注释,但是我只想为每个文件选择一行,记录最近的注释。
我尝试了一组不同的分组组合,具有最大,最大,最大...但无法获得预期的结果。
我想这只是一个窍门,但我不知道...
任何帮助都将受到欢迎!
谢谢 文森特
答案 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