这是一个间隙和孤岛样式的问题,但是我们没有使用两个
row_numbers(),而是在最里面的子查询中使用
id和
row_number()。接下来
count()over()获取每条计数
grp,最后返回带有的计数
cnt > 1。
select id, companyname from ( select id , companyName , grp , cnt = count(*) over (partition by companyname, grp) from ( select * , grp = id - row_number() over (partition by companyname order by id) from companies ) islands ) dwhere cnt > 1order by id
extrester演示:http://rextester.com/ACP73683
返回:
+----+-------------+| id | companyname |+----+-------------+| 3 | pigs ltd || 4 | pigs ltd || 5 | cats ltd || 6 | cats ltd |+----+-------------+



