在 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)
number | grade | weight
:----- | ----: | -----:
1-2 | 1 | 364
3-5 | 3 | 576
6-10 | 1 | 965
11-15 | 2 | 984
这是我在 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)
number | grade | weight :----- | ----: | -----: 1-2 | 1 | 364 3-5 | 3 | 576 6-10 | 1 | 965 11-15 | 2 | 984