【发布时间】:2020-11-23 00:13:26
【问题描述】:
我有以下数据和查询来获取带有MAX(wins) 的季节到当前季节:
WITH results as (
SELECT 'DAL' as team, 2010 as season, 6 as wins union
SELECT 'DET' as team, 2010 as season, 6 as wins union
SELECT 'DET' as team, 2011 as season, 10 as wins union
SELECT 'DET' as team, 2012 as season, 4 as wins union
SELECT 'DET' as team, 2013 as season, 7 as wins union
SELECT 'DET' as team, 2014 as season, 11 as wins
) SELECT team, season, wins
,MAX(wins) OVER (PARTITION BY team ORDER BY season ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) max_wins_thus_far
FROM results;
# team, season, wins, max_wins_thus_far
DAL, 2010, 6, 6
DET, 2010, 6, 6
DET, 2011, 10, 10
DET, 2012, 4, 10
DET, 2013, 7, 10
DET, 2014, 11, 11
在这里我们可以看到,例如,对于 DET,2011 年的最大获胜次数为 10,因此从 2011 年到 2014 年,“max_wins”列是 10,当它具有更大的值时的11。不过,我想在那个时候获得最高总胜率的赛季。例如,结果如下所示:
# team, season, wins, max_wins_thus_far, season_with_max_wins_thus_far
DAL, 2010, 6, 6, 2010
DET, 2010, 6, 6, 2010
DET, 2011, 10, 10, 2011 <-- 2011 has the most wins for DET
DET, 2012, 4, 10, 2011
DET, 2013, 7, 10, 2011
DET, 2014, 11, 11, 2014 <-- now 2014 is the season with the most wins...
如何在分析函数中做到这一点?我能做的最好的事情是用数据构建一个对象,但不知道从那里去哪里:
# team, season, wins, max_wins_thus_far
DAL, 2010, 6, {"2010": 6}
DET, 2010, 6, {"2010": 6}
DET, 2011, 10, {"2010": 6, "2011": 10}
DET, 2012, 4, {"2010": 6, "2011": 10, "2012": 4}
DET, 2013, 7, {"2010": 6, "2011": 10, "2012": 4, "2013": 7}
DET, 2014, 11, {"2010": 6, "2011": 10, "2012": 4, "2013": 7, "2014": 11}
【问题讨论】:
-
我想我们可以用
lag做到这一点 -
编辑您的问题并显示您想要的结果。
-
@GordonLinoff 它就在倒数第二个代码部分,不是吗?
标签: mysql sql window-functions gaps-and-islands analytic-functions