在sql server中查找序列号

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

这是我在sql server中的表:

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

我希望sql server中的输出不带任何临时表:

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

有人知道我怎么做吗?

hfwmuf9z

hfwmuf9z1#

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

  1. select
  2. concat(min(number), '-', max(number)) number,
  3. grade,
  4. sum(weight) weight
  5. from (
  6. select
  7. t.*,
  8. row_number() over(partition by grade order by number) rn
  9. from mytable t
  10. ) t
  11. group by grade, number - rn
  12. order by min(number)

db小提琴演示:

  1. number | grade | weight
  2. :----- | ----: | -----:
  3. 1-2 | 1 | 364
  4. 3-5 | 3 | 576
  5. 6-10 | 1 | 965
  6. 11-15 | 2 | 984
展开查看全部

相关问题