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)
;