一尘不染

获取最后一组不同的记录

mysql

我有一个包含以下列的数据库表:

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。


阅读 207

收藏
2020-05-17

共1个答案

一尘不染

这应该为您工作。

 SELECT * 
 FROM [tableName] 
 WHERE id IN (SELECT MAX(id) FROM [tableName] GROUP BY code)

如果id为AUTO_INCREMENT,则无需担心datetime的计算成本会高得多,因为最新的datetime也会具有最高的id。

更新:
从性能的角度来看,确保在处理大量记录时对idcode列建立索引。如果id是主键,则它是内置的,但是您可能需要添加覆盖code和的非聚集索引id

2020-05-17