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
此处演示:
@JohnHC 给出的答案的替代方法是使用相关子查询:
SELECT t1.*
FROM yourTable t1
WHERE t1.y = (SELECT MAX(y) FROM yourTable t2 WHERE t2.date = t1.date)
虽然我希望它 运行 比连接选项慢,但至少对于更大的数据集,它确实可以选择不那么冗长。
此处演示:
将 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;
我有这个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
此处演示:
@JohnHC 给出的答案的替代方法是使用相关子查询:
SELECT t1.*
FROM yourTable t1
WHERE t1.y = (SELECT MAX(y) FROM yourTable t2 WHERE t2.date = t1.date)
虽然我希望它 运行 比连接选项慢,但至少对于更大的数据集,它确实可以选择不那么冗长。
此处演示:
将 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;