如何在sql中按连续记录分组

问题描述 投票:1回答:2

我的桌子上有这些记录

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
2个回答
0
投票

这是一个孤岛问题。假设id连续递增,则可以使用row_number()之间的差异来定义具有相同colour的“相邻”记录组:


0
投票

这是一个差距和孤岛的问题。您可以使用行号的不同来解决此问题:

© www.soinside.com 2019 - 2024. All rights reserved.