在 SQL 服务器中查找序列号

Find sequence number in SQL Server

这是我在 SQL 服务器中的 table :

number     grade    weight
--------------------------
  1         1         185
  2         1         179
  3         3         191
  4         3         192
  5         3         193
  6         1         194
  7         1         196
  8         1         188
  9         1         187
  10        1         200
  11        2         201
  12        2         202
  13        2         203
  14        2         191
  15        2         187

我希望在 SQL 服务器中没有任何临时文件 table :

Number     grade     weight
----------------------------
 1-2         1        364
 3-5         3        576
 6-10        1        965
 11-15       2        984

有人知道我该怎么做吗?

这是一个缺口和孤岛问题。我认为最简单的方法是计算 number 和计算出的 row_number():

之间的差异
select 
    concat(min(number), '-', max(number)) number,
    grade,
    sum(weight) weight
from (
    select 
        t.*,
        row_number() over(partition by grade order by number) rn
    from mytable t
) t
group by grade, number - rn
order by min(number)

Demo on DB Fiddle:

number | grade | weight
:----- | ----: | -----:
1-2    |     1 |    364
3-5    |     3 |    576
6-10   |     1 |    965
11-15  |     2 |    984