SQL Query用于根据序列对结果进行分组

Nag*_*esh 13 sql sql-server

我有这样一张桌子:

ID  Seq  Amt
1   1    500
1   2    500
1   3    500
1   5    500
2   10   600
2   11   600
3   1    700
3   3    700
Run Code Online (Sandbox Code Playgroud)

我想将连续序列号分组为一行,如下所示:

ID  Start  End  TotalAmt
1   1      3    1500
1   5      5    500
2   10     11   1200
3   1      1    700
3   3      3    700
Run Code Online (Sandbox Code Playgroud)

请帮助实现这一结果.

And*_*y M 21

WITH numbered AS (
  SELECT
    ID, Seq, Amt,
    SeqGroup = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Seq) - Seq
  FROM atable
)
SELECT
  ID,
  Start = MIN(Seq),
  [End] = MAX(Seq),
  TotalAmt = SUM(Amt)
FROM numbered
GROUP BY ID, SeqGroup
ORDER BY ID, Start
;
Run Code Online (Sandbox Code Playgroud)

  • +1我花了一段时间才弄清楚“-Seq”技巧并验证(为我自己)不会有任何冲突,但OP不能要求比这更好的了。 (2认同)