我有一个包含以下列的数据库表:
id code value datetime timestamp
在此表中,唯一的唯一值位于id中,即主键。
我想基于datetime值检索该表中的最后一组不同的记录。例如,下面是我的桌子
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的记录,即具有不同代码(基于datetime值)的最后一组记录。我强调的只是我要实现的目标的一个示例,因为此表最终将包含数百万条记录和数百个单独的代码值。
我可以使用什么SQL语句来实现这一目标?我似乎无法通过单个SQL语句完成它。我的数据库是MySQL 5。
这应该为您工作。
SELECT * FROM [tableName] WHERE id IN (SELECT MAX(id) FROM [tableName] GROUP BY code)
如果id为AUTO_INCREMENT,则无需担心datetime的计算成本会高得多,因为最新的datetime也会具有最高的id。
更新: 从性能的角度来看,确保在处理大量记录时对id和code列建立索引。如果id是主键,则它是内置的,但是您可能需要添加覆盖code和的非聚集索引id。
id
code