在 SQL Server 中查找序列号

Posted

技术标签:

【中文标题】在 SQL Server 中查找序列号【英文标题】:Find sequence number in SQL Server 【发布时间】:2020-07-31 20:45:09 【问题描述】:

这是我在 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

有人知道我该怎么做吗?

【问题讨论】:

请用您正在运行的数据库标记您的问题:sql-server、oracle、postgresql...? 【参考方案1】:

这是一个孤岛问题。我认为最简单的方法是获取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

号码 |等级 |重量 :----- | ----: | -----: 1-2 | 1 | 364 3-5 | 3 | 576 6-10 | 1 | 965 11-15 | 2 | 984

【讨论】:

非常感谢。

以上是关于在 SQL Server 中查找序列号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架在 Sql Server Express 中获取下一个序列号?

序列号,在 SQL Server 中创建和修改

sql server 2008 请教怎样生成序列号

SQL Server 填补时间序列中的空白

SQL server 2012 数据库 序列号查看

sql server 生成序列号