mysql - 用于获取 ID1 的最新条目的 SQL 查询

标签 mysql sql greatest-n-per-group

我有一个具有以下属性的架构:

  1. ID1
  2. ID2
  3. 更新日期时间

这个模式的主键是{ID1,ID2}。我需要为给定的 ID1 找到 ID2 的值。 ID2 将有多个值。我需要我可以使用“更新日期时间”获取的最新时间。

我有一个 ID1 列表,我需要在一个查询中找到相应的 ID2。

我可以做到,使用两个查询。首先按 ID1 分组并获取 ID1 的最大日期时间。然后获取该“日期时间”值的 ID2(我们可以假设“更新日期时间”对于所有条目都是唯一的)。

但我在想是否有可能在单个查询中做到这一点。

我正在使用 MySQL。

最佳答案

假设您的表名是 MYTABLE,我使用子查询为每个 获取 ID2 值和 MAX(UPDATED) >ID1 值。 ID1 值作为逗号分隔值传递,显示为 LIST_OF_ID1s

下面的查询应该没问题:

SELECT * FROM MYTABLE T1 where T1.ID1 in (LIST_OF_ID1s)
AND T1.ID2 = 
 (SELECT T2.ID2 FROM MYTABLE T2 
  where T1.ID1 = T2.ID1 
  ORDER BY T2.UPDATED DESC LIMIT 1);

工作 SQL Fiddle 演示 here

关于mysql - 用于获取 ID1 的最新条目的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894444/

相关文章:

PHP 未知列号

sql - 带有空字符串的 DB2 NVL

mysql - 每个组的限制查询

mysql - 使用 utf8_encode()(php 函数)的国际化内容最佳实践

java - 保留和释放数据

sql - 传递给 LEFT 或 SUBSTRING 函数的长度参数无效 ERROR msg

php - 多个连接在 Yii2 的 where 条件下表现不同

mysql - 使用附加搜索条件查找每组链接表中字段的总和

sql - 在 T-SQL 中,当另一行 <> 'X' 时检索最新日期的一行数据

mysql - 群组中的 UserMiddleware 问题