在sql server中查找序列号

5cg8jx4n  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(465)

这是我在sql server中的表:

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 server中的输出不带任何临时表:

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

有人知道我怎么做吗?

hfwmuf9z

hfwmuf9z1#

这是一个缺口和孤岛问题。我认为最简单的方法就是区别 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)

db小提琴演示:

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

相关问题