【发布时间】:2020-05-31 18:49:03
【问题描述】:
我正在努力实现以下结果:
现在,该组来自
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_inv) 的总行数,并仅对从该位置开始的一半计算 P&L 中的金额。
例如,当
seq = 2
seq_inv 将是 = 13,其中一半是 6,所以我需要将 seq = 2 中的以下 6 个位置相加。
当 seq = 4 时有 11 个位置到最后(seq_inv = 11),所以一半是 5,所以我想从 seq = 4 开始计算 5 个位置。
我希望这是有道理的,我正在尝试提出一个能够适应我所拥有的情况的规则,因为分区为我提供了需要求和的数字。
我也在考虑是否与前 50% 或类似的分区有关,但我想这不存在。
【问题讨论】:
-
不能很好地理解范围。比如黄色的那个,3-8这个范围是怎么发生的?
-
@TheImpaler 从范围 3 到末尾,有 12 行,其中一半是 6,所以我从位置 3 总结了 6 个位置
-
@Baldie47 。 . .你应该设置一个 dbfiddle.
-
紫色框是
-1的五行,但结果为3.76。黄色框是六行-1和一行0.6,但结果为10.64。对于难以描述的要求,必须示例数据和示例结果实际上是正确的。
标签: sql sql-server tsql sum window-functions