mysql - 获取最后一组不同的记录

标签 mysql distinct

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

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。

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

关于mysql - 获取最后一组不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5554075/

相关文章:

MYSQL 查询行组问题

mysql - 从 MySQL 数据库中的多个相同行中选择最新记录

mysql - 如何将 MySQL 数据库中的数据读取到 jBPM Web Designer 中的流程中?

mysql - 我无法连接新版本的 vscode 和新版本的 mysql

python - 仅检索 MySQL 中的最新行

MySQL - 使用另一个表中的列对行进行排序并且不重复数据

javascript - 一种算法来判断从列表中辨别单词需要多少个不同的前导字符?

mysql - 分割.sql备份文件

php返回数组到javascript

c# - 如何将 LINQ to SQL Distinct() 运算符应用于 List<T>?