我正在努力取得以下成果:
现在,这个团队来自
SUM(CASE WHEN seqnum <= (0.5 * seqnum_rev) THEN i.[P&L] END) OVER(PARTITION BY i.bracket_label ORDER BY i.event_id) AS [P&L 50%],
我需要在每次迭代中,它计算从结束到位置(seq\u inv)的行总数,并且只对从该位置开始的那一半行的损益金额求和。
例如,当
seq = 2
seq\u inv将是=13,它的一半是6,所以我需要从seq=2对以下6个位置求和。
当seq=4时,到最后有11个位置(seq\u inv=11),所以一半是5,所以我想从seq=4算5个位置。
我希望这是有意义的,我正在试图提出一个规则,将能够适应我的情况,因为分区是什么给我的数字需要求和。
我也在想,如果有什么事与分区的前50%或类似的,但我猜这是不存在的。
2条答案
按热度按时间inkz8wg91#
我的优势是我以前帮助过他,而且有一点额外的背景。
上下文是,这只是一个非常长的公共表表达式链的后期。不幸的是,这意味着自连接和/或相关子查询的开销很大。
最好使用窗口函数来解决这个问题,因为数据集已经具有适当的排序和分区。
我的阅读是。。。
这个
SUM(5:9)
(表示第5行到第9行(含)的和等于SUM(5:end) - SUM(10:end)
这让我想到。。。注:使用
,
&
,%
在列名中是可怕的,不要这样做;)编辑:已更正
ORDER BY
在累计总和中。3j86kqsm2#
我不认为窗口函数可以做你想做的。您可以使用相关子查询代替,其逻辑如下: