SQL Server组只是接近值

时间:2018-06-09 01:52:30

标签: sql sql-server sql-server-2008

我有这张桌子:

name    value
-------------
nameA   1
nameA   2
nameA   3
nameB   4
nameB   5
nameB   6
nameA   7
nameA   8

需要这个结果:

name   startvalue endvalue
--------------------------
nameA       1         3
nameB       4         6
nameA       7         8

1 个答案:

答案 0 :(得分:3)

这称为间隙和岛屿问题。你可以用不同的行号来解决它:

select name, min(value), max(value)
from (select t.*,
             row_number() over (order by value) as seqnum,
             row_number() over (partition by name order by value) as seqnum_n
      from t
     ) t
group by name, (seqnum - seqnum_n);

行号的不同之处在于找到相同的相邻名称。为什么这个工作有点难以解释。但是,如果查看子查询的结果,您将看到差异如何标识具有相同名称的相邻行。