Mar*_*nox 2 sql t-sql sql-server gaps-and-islands
我想从SQL Server表中选择重复的条目,但前提是id是连续的.
我一直试图扭曲这个答案来满足我的需求,但我无法让它发挥作用.
以上答案是Oracle,但我看到的是SQL Server还具有lead
和lag
功能.
此外,我认为上面的答案*
是重复的,但我只想选择重复.
select
id, companyName,
case
when companyName in (prev, next)
then '*'
end match,
prev,
next
from
(select
id,
companyName,
lag(companyName, 1) over (order by id) prev,
lead(companyName, 1) over (order by id) next
from
companies)
order by
id;
Run Code Online (Sandbox Code Playgroud)
示例:
所以从这个数据集:
id companyName
-------------------
1 dogs ltd
2 cats ltd
3 pigs ltd
4 pigs ltd
5 cats ltd
6 cats ltd
7 dogs ltd
8 pigs ltd
Run Code Online (Sandbox Code Playgroud)
我想选择:
id companyName
-------------------
3 pigs ltd
4 pigs ltd
5 cats ltd
6 cats ltd
Run Code Online (Sandbox Code Playgroud)
我一次又一次地对我得到的答案的数量和质量感到吃惊.这是其中一次.我没有专业水平来判断一个答案比另一个好,所以我去了SqlZim,因为这是我看到的第一个有效的答案.但是很高兴看到不同的方法.特别是在一个小时前,我想知道"这有可能吗?".
你非常接近你想要的:
select id, companyName
from (select c.*,
lag(companyName, 1) over (order by id) prev,
lead(companyName, 1) over (order by id) next
from companies c
) a
where CompanyName in (prev, next)
order by id;
Run Code Online (Sandbox Code Playgroud)