MYSQL返回每组的最大值

标签 mysql sql greatest-n-per-group

我在使用 mysql 返回组的最大值时遇到一点问题

这是我的专栏

     id | date           | time     | tran
--------+----------------+----------+----------
      1 | 2014/03/31     | 17:23:00 | 1234
      1 | 2014/03/31     | 17:24:00 | 3467
      2 | 2014/03/31     | 17:26:00 | 2345

我的查询

SELECT id, max(date), MAX(time) , tran
FROM table
GROUP BY id

结果

     id | date           | time     | tran
--------+----------------+----------+----------
      1 | 2014/03/31     | 17:26:00 | 1234
      2 | 2014/03/31     | 17:24:00 | 2345  

预期的答案应该是

     id | date           | time     | tran
--------+----------------+----------+----------
      1 | 2014/03/31     | 17:26:00 | 3467
      2 | 2014/03/31     | 17:24:00 | 2345  

最佳答案

您可以通过对同一张表的最大值使用自连接来做到这一点

SELECT t.* FROM
Table1 t
JOIN (
SELECT id, max(date) date, MAX(time) time , tran
FROM Table1
GROUP BY id) t2
ON(t.id=t2.id AND t.date=t2.date AND t.time=t2.time)

Fiddle

日期和时间的最大值之间可能存在差异,因此您应该使用单个字段为当前模式保存日期和时间,这是最佳的

SELECT t.* FROM
Table1 t
JOIN (
SELECT id, 
  max(concat(date,' ',time)) `date_time`

FROM Table1
GROUP BY id) t2
ON(t.id=t2.id AND (concat(t.date,' ',t.time))=t2.date_time )

Fiddle

关于MYSQL返回每组的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22758987/

相关文章:

mysql - 如何使用 DATEDIFF 查找行之间的分钟差异?

mysql - 添加外键约束失败

php - 如何从每组中选择最新的一个? (尝试选择每个人的最新消息并将其链接到对话)

sql - 如何使用SQL MAX函数获取一行的所有字段?

mysql - 根据值之间的最小差异连接 Hive 表

MySQL 在多个字段上执行 where

mysql - 加入 m :n MySQL relation with every entity in own column

mysql - 如何按组分隔两列计数?

sql - 具有可能存在也可能不存在的列的 Entity Framework

sql - 找出第一个超过一定值的记录