我想从结果表中随时间提取值可能上下波动的最大值列表。例如,板球高分数据库会有很多结果,但我想列出哪个击球手的最高一天得分与该记录达到的日期相比。
虽然检查前一行的CTE似乎很接近,但我无法找到此类查询的模式。有人可以帮助使用模式名称或实现此查询的有效方法示例吗?
示例数据
Value | date
1| 1/1/1970
2| 2/1/1970
1| 3/1/1970
2| 4/1/1970
1| 5/1/1970
3| 6/1/1970
10| 22/1/1970
4 | 1/12/1970
7 | 22/5/1975
预期结果
Value | date
1| 1/1/1970
2| 2/1/1970
3| 6/1/1970
10| 22/1/1970
我开始认为自我加入会很好。
答案 0 :(得分:1)
如果我了解数据和结果,您似乎想要第一天那天特定值被击中。您可以使用聚合执行此操作,但使用min()
函数:
select value, min(date) as date
from table t
group by value;
至少,这将在问题中为您提供所需的结果。
编辑:
所以你想要累积最大值的第一个日期。你也可以得到这个。
select cummax, min(date) as date
from (select date, max(value) over (order by date) as cummax
from table t
) t
group by cummax;
答案 1 :(得分:1)
可以通过简单地LEFT JOIN
使用前一个行并检查其中max(value)
是否小于当前行(或第NULL
行来完成)
SELECT t1.value
,t1.date
FROM Table1 AS t1
LEFT JOIN Table1 AS t2
ON t1.date > t2.date
GROUP BY
t1.id
HAVING
max(t2.value) IS NULL
OR max(t2.value) < t1.value
ORDER BY t1.date;