我有这张桌子:
id|date |x |y
1 |2017-01-01|1 |0
2 |2017-01-01|23|1
4 |2017-01-02|1 |0
我会选择列x和日期,其中按日期分组的行具有最高的y值。
在这种情况下我会:
id|date |x |
2 |2017-01-01|23|
4 |2017-01-02|1 |
此表源自另一个联接:
X表:
date
2017-01-01
2017-01-02
....
Y表:
from |to |x |y
2017-01-01|2017-01-10|1 |0
2017-01-01|2017-01-05|23|1
X在from和to之间加入Y.
我该怎么办?提前谢谢。
答案 0 :(得分:2)
在子查询中,找到每个日期的最大值(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
在这里演示:
答案 1 :(得分:2)
@JohnHC给出的答案的替代方案是使用相关子查询:
SELECT t1.*
FROM yourTable t1
WHERE t1.y = (SELECT MAX(y) FROM yourTable t2 WHERE t2.date = t1.date)
虽然我希望这比连接选项运行得慢,但至少对于较大的数据集,这可以选择不那么冗长。
在这里演示:
答案 2 :(得分:0)
将表连接到自己,日期相同,以便第二个表的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;