获得小组最新记录

时间:2014-04-01 21:54:59

标签: mysql sql

我有以下表结构

id    dateChanged    changeType    changeID

具有以下数据

1   2014-04-01  memEdit   205
2   2014-04-01  memEdit   205
3   2014-03-31  memEdit   1
4   2014-04-01  memEdit   1
5   2014-04-01  memEdit   3

现在我想获得每个更改ID的最新记录。所以我会用ids 2,4,5获得记录。 我试过把它们分组,但它给了我每组的第一个(所以我得到1,3,5)

3 个答案:

答案 0 :(得分:2)

1。 OLD不工作查询

<击>

<击>
SELECT * FROM `your_table`
GROUP BY `changeID`
ORDER BY `id` DESC

<击>

2。工作查询

问题在于MySQL的非标准疯狂。

MySQL不会强迫您GROUP BY包含在SELECT列表中的每一列。因此,如果您只有GROUP BY一列但总共返回4列,则无法保证其他列值属于返回的分组changeID记录。如果列不在GROUP BY MySQL中,则选择应返回的值。

使用子查询将保证每次都返回正确的记录值。

正确且working query将是:

SELECT `t`.* FROM(
    SELECT * FROM `smdbs_app`
    ORDER BY `id` DESC
) `t`
GROUP BY `changeID`
ORDER BY `id`

答案 1 :(得分:0)

也许这有效:

SELECT changeID, id
FROM myTable 
GROUP BY changeID
ORDER BY dateChanged DESC;

答案 2 :(得分:0)

这可以通过一个简单的子查询来完成:

select * from table t
where t.dateChanged =
(select max(dateChanged)
from table t2
where t2.id = t.id)
;

请告诉我这是否有帮助!