Mysql 在组中获取最新记录

Mysql 在组中获取最新记录,mysql,sql,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的最新记录。因此,我将获取id为2,4,5的记录。 我尝试过将

我有下面的表结构

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的最新记录。因此,我将获取id为2,4,5的记录。 我尝试过将它们分组,但它会给我每个集合的第一个(因此我得到1,3,5)

也许这是有效的:

SELECT changeID, id
FROM myTable 
GROUP BY changeID
ORDER BY dateChanged DESC;
1.旧的不工作查询

2.工作查询 问题在于MySQL的非标准狂热

MySQL不会强制您按
列表中包含的每一列对
进行分组。因此,如果只按一列进行分组,但总共返回4列,则不能保证其他列值将属于返回的分组
changeID
记录。如果列不在
groupby
MySQL中,则选择应返回的值

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

正确的答案是:

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

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

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

让我知道这是否有帮助

可能的重复没有任何区别,它仍然选择了错误的rows@CeriTurner我知道问题出在哪里了。到目前为止,它肯定已经解决了一半,但还有一点要做。
id
列是否是一个
autoincrement
列(意思是同一组最近的
id
s更改是否总是大于先前的
id
s更改)?是的,id是一个自动增量。id将始终是最新的,即使单个更改id上有多个条目day@CeriTurner不可能。“你能创建一个新的列表,让我可以进一步查看吗?”CeriTurner更新了我的答案。你的问题现在就应该解决了。这没什么区别,还是选错了行
select * from table t
where t.dateChanged =
(select max(dateChanged)
from table t2
where t2.id = t.id)
;