【发布时间】:2020-09-15 05:05:05
【问题描述】:
我的表有这些记录
ID Colour
------------
1 Red
2 Red
3 Red
4 Red
5 Red
6 Green
7 Green
8 Green
9 Green
10 Red
11 Red
12 Red
13 Red
14 Green
15 Green
16 Green
17 Blue
18 Blue
19 Red
20 Blue
我可以像这样轻松按颜色分组
SELECT Colour, MIN(ID) AS iMin, MAX(ID) AS iMax
FROM MyTable
GROUP BY Colour
这会返回这个结果
Colour iMin iMax
-------------------------
Red 1 19
Green 6 16
Blue 17 20
但这不是我想要的,因为红色不会从 1 一直到 19,绿色会破坏序列。
结果应该是这样的
Colour iMin iMax
------------------------
Red 1 5
Green 6 9
Red 10 13
Green 14 16
Blue 17 18
Red 19 19
Blue 20 20
我设法通过光标来做到这一点,但想知道是否有更有效的方法来做到这一点
【问题讨论】:
标签: sql sql-server date window-functions gaps-and-islands