mysql - 列出mysql中每一项的最后一条记录

标签 mysql sql sorting

表中的每个项目(项目由 Serial 生成)都有很多记录,我需要获取每个项目的最后一条记录,因此我运行以下代码:

SELECT ID,Calendar,Serial,MAX(ID) 
FROM store 
GROUP BY Serial DESC

这意味着它必须为每个项目显示一条记录,该记录中的所有列数据都是与每个项目相关的最后一条记录,但结果如下:

-------------------------------------------------------------+
  ID    |            Calendar        |  Serial |    MAX(ID)  |
-------------------------------------------------------------|
7031053 |   2016-05-14 14:05:14 79.5 |  N10088 |    7031056  |
7053346 |   2016-05-14 15:17:28 79.8 |  N10078 |    7053346  |
7051349 |   2016-05-14 15:21:29 86.1 |  J20368 |    7051349  |
7059144 |   2016-05-14 15:50:27 89.6 |  J20367 |    7059144  |
7045551 |   2016-05-14 15:15:15 89.2 |  J20366 |    7045551  |
7056243 |   2016-05-14 15:25:34 85.2 |  J20358 |    7056245  |
7042652 |   2016-05-14 15:18:33 83.9 |  J20160 |    7042652  |
7039753 |   2016-05-14 11:48:16 87   |  J20158 |    7039753  |
7036854 |   2016-05-14 15:18:35 87.5 |  J20128 |    7036854  |
7033955 |   2016-05-14 15:20:45 83.4 |  9662   |    7033955  |
-------------------------------------------------------------+

问题是,为什么在与 Serial N10088 相关的记录中,ID 是“7031053”,但 MAX(ID) 是“7031056”?或者也适用于 J20358?

每一行必须显示每个项目的最后一条记录,但在我的输出中它不是真的!

最佳答案

如果您想要具有最大值的行,那么您需要联接或其他某种机制。

这是使用相关子查询的简单方法:

select s.*
from store s
where s.id = (
   select max(s2.id) 
   from store s2 
   where s2.serial = s.serial
);

您的查询使用了 SQL Server 的一个(错误)功能,该功能会产生很多困惑并且不是特别有帮助:您在 select 中有列。不在 group by 中。这些能得到什么值(value)?

嗯,在大多数数据库中,答案很简单:查询会生成 ANSI 指定的错误。 MySQL 从不确定的匹配行中提取附加列的值。这很少不是查询作者的意图。

为了提高性能,请在 store(serial, id) 上添加索引.

关于mysql - 列出mysql中每一项的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226504/

相关文章:

sql - 从 Oracle SQL 中的当前日期减去 30 年

sql - 如何从两个相关但不同的表中获取不同的用户计数

java - 将列表内容排序为新列表

javascript - 在 Javascript 中按数组中的多个对象排序

android - 类扩展 AsyncTask 将不会启动

mysql - 如何将mysql中的每周数据拆分为每日数据

php - fatal error : Call to a member function setFetchMode() on a non-object[Normal]

mysql - 多个 LAG 总计为 LEAD

c++ - 如何按除数对数组元素进行排序?

mysql - 如何将具有相同PK的元素的数据添加在一起