【问题标题】:Creating a running total grouped by a statement evaluation创建按语句评估分组的运行总计
【发布时间】:2017-11-29 10:56:32
【问题描述】:

使用这篇文章,我实现了一个查询来确定用户事件的打包间隔:

http://www.itprotoday.com/microsoft-sql-server/new-solution-packing-intervals-problem

我最终得到以下输出: 但是,我无法理解的是如何按 userId 对每个日期的打包间隔进行分组。基本上,我需要一个组列,当 isStart 为 1 时每行递增,但当 isStart 为空时输出与前一行相同。

应该这样:

Row 1: 1
Row 2: 2
Row 3: 2
Row 4: 3
Row 5: 4
Row 6: 5
Row 7: 6
Row 8: 7
Row 9: 8
Row 10: 9
Row 11: 9
Row 12: 9
Row 13: 10

...等

然后,我可以检索每个组的最小开始和最大结束。我敢肯定这真的很明显,但我似乎无法发现它!

【问题讨论】:

标签: sql sql-server packing


【解决方案1】:

只需使用累积和:

select t.*,
       sum(isStart) over (order by start) as grp
from t;

【讨论】:

  • 谢谢,我知道我把这弄得太复杂了!
猜你喜欢
  • 2021-10-01
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 2018-08-17
相关资源
最近更新 更多