请教一个求连续数的问题

tuziblog 2011-06-16 03:57:23
数据库结构如下
id xid year
1 1 2000
2 1 2001
3 1 2002
4 1 2005
5 2 2000
6 2 2002
7 2 2003
8 2 2007
9 3 2000

求大于连续n年的记录,year必须是连续的,year有断年的情况

例如连续三年,2001.2002.2003 也可能是2001.2003.2004.2005也有可能是2001.2002.2003.2004.2005.2006,连续年就是年

是连续的(这句话好像有问题)

求高手指点
...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qgqch2008 2011-06-16
  • 打赏
  • 举报
回复
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 行受影响)
*/
bluesmiler 2011-06-16
  • 打赏
  • 举报
回复
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
tuziblog 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zy112429 的回复:]

哦 。
[/Quote]
。。。
GoAwayZ 2011-06-16
  • 打赏
  • 举报
回复
哦 。
tuziblog 2011-06-16
  • 打赏
  • 举报
回复
最后一聚合只显示xid就可以了,
GoAwayZ 2011-06-16
  • 打赏
  • 举报
回复
你的数据的结果是什么?

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧