我有一个包含以下列的数据库表:
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是主键,则内置它,但您可能需要添加包含代码和ID的非聚集索引.