34,873
社区成员
发帖
与我相关
我的任务
分享CREATE TABLE TB(id INT IDENTITY(1,1) PRIMARY KEY, xid INT, [year] CHAR(4))
INSERT dbo.TB
SELECT 1, '2000' UNION ALL
SELECT 1, '2001' UNION ALL
SELECT 1, '2002' UNION ALL
SELECT 1, '2005' UNION ALL
SELECT 2, '2000' UNION ALL
SELECT 2, '2002' UNION ALL
SELECT 2, '2003' UNION ALL
SELECT 2, '2007' UNION ALL
SELECT 3, '2000'
SELECT a.*
FROM dbo.TB a ,
( SELECT [year] - id AS col ,
xid
FROM dbo.TB
GROUP BY xid ,
[year] - id
HAVING COUNT([year] - id) = 3--可以查询任意连续数
) b
WHERE a.xid = b.xid
AND ( a.[year] - a.id ) = b.col
DROP TABLE dbo.TB
/*
id xid year
----------- ----------- ----
1 1 2000
2 1 2001
3 1 2002
(3 行受影响)
*/select a.id,a.xid,a.year from tb a,
(select xid,cast(year as int)-id sid from tb
group by xid,cast(year as int)-id
having COUNT(*)>=3) b
where a.xid=b.xid
and cast(a.year as int)-a.id=b.sid