我有一个包含以下列的数据库表:
id code value datetime timestamp
在此表中,唯一的唯一值位于 id 中,即主键。
我想根据日期时间值检索此表中最后一组不同的记录。例如,假设下面是我的表
id code value datetime timestamp
1 1023 23.56 2011-04-05 14:54:52 1234223421
2 1024 23.56 2011-04-05 14:55:52 1234223423
3 1025 23.56 2011-04-05 14:56:52 1234223424
4 1023 23.56 2011-04-05 14:57:52 1234223425
5 1025 23.56 2011-04-05 14:58:52 1234223426
6 1025 23.56 2011-04-05 14:59:52 1234223427
7 1024 23.56 2011-04-05 15:00:12 1234223428
8 1026 23.56 2011-04-05 15:01:14 1234223429
9 1025 23.56 2011-04-05 15:02:22 1234223430
我想检索 ID 为 4、7、8 和 9 的记录,即最后一组具有不同代码的记录(基于日期时间值)。我强调的只是我想要实现的一个示例,因为该表最终将包含数百万条记录和数百个单独的代码值。
我可以使用什么 SQL 语句来实现这一点?我似乎无法用一条 SQL 语句来完成它。我的数据库是 MySQL 5。
最佳答案
这应该适合你。
SELECT *
FROM [tableName]
WHERE id IN (SELECT MAX(id) FROM [tableName] GROUP BY code)
如果 id 为 AUTO_INCREMENT,则无需担心计算成本要高得多的日期时间,因为最近的日期时间也将具有最高的 id。
更新:从性能的角度来看,确保在处理大量记录时对 id
和 code
列进行索引。如果 id
是主键,这是内置的,但您可能需要添加一个非聚集索引,覆盖 code
和 id
。
关于mysql - 获取最后一组不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5554075/