我有一个存储交易历史的数据库,主要是评论更新。因此,我接受具有相同ID的多个记录。
我需要做的是拉入所有记录并显示每条记录的最新记录。
以下是具有相同UID的2条记录的示例。突出显示的记录是2中的最新记录。
以下是我尝试的其中一个查询:
SELECT
uid
,voyage
,MAX(comments)
,MAX(edituser)
,MAX(editdate)
FROM
table
GROUP BY
uid
ORDER BY
uid
这是返回的相同UID:
如果您注意到,它是最新的用户和editdate,但它不是最新的评论,应该是'这是测试评论'。
我已经尝试了几个查询,但这是我最接近返回每条记录的最新查询。
我试过这个链接:SQL Select record with most recent date
但我认为在这种情况下我不需要使用任何JOINS,因为一切都在同一个表中。但话说回来,我的力量不在于MYSQL。
我希望有人可以通过提供正确(和更好)的查询来帮助我。
答案 0 :(得分:1)
如果那是你想要的输出,那么你应该使用MIN()
代替MIN(comments)
答案 1 :(得分:1)
有了类似的东西,你可能最好使用子选择。
SELECT
t1.uid,
t1.voyage,
(SELECT comments FROM table t2 WHERE t2.uid = t1.uid AND t2.editdate = MAX(t1.editdate) LIMIT 1) as comments,
(SELECT edituser FROM table t2 WHERE t2.uid = t1.uid AND t2.editdate = MAX(t1.editdate) LIMIT 1) as edituser,
(SELECT editdate FROM table t2 WHERE t2.uid = t1.uid AND t2.editdate = MAX(t1.editdate) LIMIT 1) as editdate,
FROM table t1
GROUP BY t1.uid
ORDER BY t1.uid
每个子选择将其缩小到相同的uid
,然后选择具有最新editdate
的那个。
答案 2 :(得分:0)
按降序将您的订单更改为editdate:
... ORDER BY editdate DESC