我的桌子上有这些记录
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
我设法通过游标执行此操作,但想知道是否有更有效的方法来执行此操作
这是一个孤岛问题。假设id
连续递增,则可以使用row_number()
之间的差异来定义具有相同colour
的“相邻”记录组:
这是一个差距和孤岛的问题。您可以使用行号的不同来解决此问题: