sql - 在 SQL Server 中查找序列号
问题描述
这是我在 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
有谁知道我该怎么做?
解决方案
这是一个差距和孤岛问题。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)
号码 | 等级 | 重量 :----- | ----: | -----: 1-2 | 1 | 364 3-5 | 3 | 576 6-10 | 1 | 965 11-15 | 2 | 984
推荐阅读
- php - Quickbooks Online - 无法使用 Quickbooks-V3-PHP-SDK 删除附件
- php - 元标签被显示不止一次
- javascript - react-bootstrap-table-next@4.0.3 需要 underscore@1.9.1 最早的固定版本是 1.12.1 - Dependabot alert
- node.js - 传递参数Node.js时调用错误的命名查询
- python - 根据第三列的值,用另一列的值填充数据框列
- rust - 在 Rust 中泛化迭代方法
- azure - Apple 和 LinkedIn 社交登录问题
- javascript - 如果特定的 className 处于活动状态,则在 x 秒内响应更改 className
- oauth-2.0 - MS Exchange:如何启用 SMTP 以使用 OAUTH2.0 但禁用基本身份验证
- mysql - 将 SQL 转换为 sequelize