繁体   English   中英

MYSQL返回每组的最大值

[英]MYSQL returning the max value 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)

小提琴

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

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 )

小提琴

关于这个主题有一篇很棒的文章,每当我面对你的问题时都会阅读。 你可能想要

应用于您的查询,这将看起来像:

   SELECT *
   FROM `table`
   WHERE (
      SELECT count(*) FROM `table` AS t
      WHERE `t`.`id` = `table`.`id` AND `t`.`tran` <= `table`.`tran`
   ) < 2;

我最喜欢这种方式,您可以轻松地获得前2个,3个或任何数量的行

你有没有尝试过GREATEST()函数:

SELECT GREATEST(field1, field2);

如果要从所有行获取mysql的绝对最大值,则可能需要使用以下查询:

SELECT GREATEST(MAX(field1), MAX(field2));

如果有帮助,请告诉我

您的查询:

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

现在,您应该在查询中使用MAX(tran)和GROUP BY tran来获得预期的结果。

否则,您显然会以tran = 1234结束,因为您的查询仅获取日期为MAX(日期)且时间为MAX(时间)但tran值为正常tran值的行。 另外,您正在使用GROUP BY id,而它必须是GROUP BY的最大值。

因此,您的查询应更改为以下内容:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM