2016-11-17 101 views
2

我有一个数据库,存储事务的历史,主要是评论更新。因此,我接受具有相同ID的多个记录。MYSQL选择所有记录与最近的日期

我需要做的是拉所有的记录和显示最近的每条记录的。

这里是2个记录用相同的UID的例子。突出显示的记录是最近的2

2 rows from database

这里是我尝试的一个查询:

SELECT 
    uid 
    ,voyage 
    ,MAX(comments) 
    ,MAX(edituser) 
    ,MAX(editdate) 
FROM 
    table 
GROUP BY 
    uid 
ORDER BY 
    uid 

这里是返回的相同的UID:

result from database

如果你会发现,这是最近的用户和editdate,但它不是最近的评论,这应该是'这是一个测试评论'。

我尝试了好几种查询,但是这是我已经得到了恢复最近的每条记录的最近。

我试过此链接:SQL Select record with most recent date

但我不认为我需要使用任何联接在这种情况下,是这一切都是在同一个表。但是再一次,我的力量不在MYSQL中。

我希望有人能够通过提供正确的(更好)查询,使这项工作帮助我。

+0

在这种情况下,我beleive你需要使用一个连接和像你所提供的链接的子查询。 –

回答

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

+0

这应该就够了。谢谢。 –

1

如果这是你想要的输出是什么,那么你应该通过降序使用MIN()而不是像MIN(comments)

+0

尝试过,但我仍然用错误的评论返回相同的记录。有什么想法吗? –

+0

@JohnBeasley,没有清楚地看到它......你应该使用'min()'聚合函数 – Rahul

+0

不会'MIN(注释)'按字典顺序抓住第一个注释吗?我不认为这就是OP想要的 –

0

更改您的订单通过向editdate:

... ORDER BY editdate DESC