MySql group by取最大值

MySql take maximum value in group by

我有这个table:

id|date      |x |y
1 |2017-01-01|1 |0
2 |2017-01-01|23|1
4 |2017-01-02|1 |0

我会 select 列 x 和日期,其中按日期分组的行具有最高的 y 值。

在这种情况下我会:

id|date      |x |
2 |2017-01-01|23|
4 |2017-01-02|1 |

此 table 派生自另一个连接:

X table:

date
2017-01-01
2017-01-02
....

Y table:

from      |to        |x |y 
2017-01-01|2017-01-10|1 |0
2017-01-01|2017-01-05|23|1

X 在开始和结束之间的日期加入 Y。

我该怎么办?提前致谢。

在子查询中,找到每个日期的 max(y),然后加入这个。

select b.*
from MyTable b
inner join
  (
    select a3.date, max(a3.y) as maxy
    from MyTable a3
    group by a3.date
  ) a
  on a.date = b.date
  and b.y = a.maxy

此处演示:

SQL Fiddle

@JohnHC 给出的答案的替代方法是使用相关子查询:

SELECT t1.*
FROM yourTable t1
WHERE t1.y = (SELECT MAX(y) FROM yourTable t2 WHERE t2.date = t1.date)

虽然我希望它 运行 比连接选项慢,但至少对于更大的数据集,它确实可以选择不那么冗长。

此处演示:

SQL Fiddle

将 table 与自身合并,其中日期相等,因此第二个 table 的 x 比第一个大。然后过滤,只保留结果,其中第二个x为NULL,意思是第一个x是最大值。

SELECT a.*
FROM myTable a
LEFT OUTER JOIN myTable b
    ON a.date = b.date AND a.x < b.x
WHERE b.x IS NULL;