微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于序列对结果进行分组的SQL查询

我有这样的表:
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

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

ID  Start  End  TotalAmt
1   1      3    1500
1   5      5    500
2   10     11   1200
3   1      1    700
3   3      3    700

请帮助实现这一结果.

解决方法

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
;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐