我有以下表结构
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)
答案 0 :(得分:2)
<击> 撞击>
<击>SELECT * FROM `your_table`
GROUP BY `changeID`
ORDER BY `id` DESC
击> <击> 撞击>
问题在于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)
;
请告诉我这是否有帮助!