查询连续N天记录

luofenghen 2011-03-31 02:12:09
no part date
1 AA 2011-03-15
2 AA 2011-03-16
3 bb 2011-03-15
4 bb 2011-03-17
5 bb 2011-03-18
6 AA 2011-03-17


查询 连续3天 的记录

结果为
no part date
1 AA 2011-03-15
2 AA 2011-03-16
6 AA 2011-03-17

请问 该如何写sql
又开了一贴 问题解决 那贴也结 描述不够清楚照成的~ 各位帮帮忙~

...全文
175 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
luofenghen 2011-04-01
  • 打赏
  • 举报
回复
用SQL语句很难实现 我用代码实现了 结贴 谢谢各位帮忙
bobofsj11 2011-03-31
  • 打赏
  • 举报
回复
学习鸟
zhongyifu 2011-03-31
  • 打赏
  • 举报
回复
好的……………………………………
bluesmiler 2011-03-31
  • 打赏
  • 举报
回复
create table tb (no int,part varchar(10),date datetime)
insert into tb values(1,'AA', '2011-03-15')
insert into tb values(2 ,'AA', '2011-03-16')
insert into tb values(3, 'bb', '2011-03-15')
insert into tb values(4 ,'bb' ,'2011-03-17')
insert into tb values(5, 'bb' ,'2011-03-18')
insert into tb values(6, 'AA' ,'2011-03-17')



select * from
(select *,COUNT(*) over (partition by part,date_c) as 最大连续天数 from
(select *,date-ROW_NUMBER() over (partition by part order by date) date_c
from tb) a) b
where 最大连续天数=3

no part date date_c 最大连续天数
----------- ---------- ----------------------- ----------------------- -----------
1 AA 2011-03-15 00:00:00.000 2011-03-14 00:00:00.000 3
2 AA 2011-03-16 00:00:00.000 2011-03-14 00:00:00.000 3
6 AA 2011-03-17 00:00:00.000 2011-03-14 00:00:00.000 3

(3 行受影响)

select * from
(select *,COUNT(*) over (partition by part,date_c) as 最大连续天数 from
(select *,date-ROW_NUMBER() over (partition by part order by date) date_c
from tb) a) b
where 最大连续天数=2

no part date date_c 最大连续天数
----------- ---------- ----------------------- ----------------------- -----------
4 bb 2011-03-17 00:00:00.000 2011-03-15 00:00:00.000 2
5 bb 2011-03-18 00:00:00.000 2011-03-15 00:00:00.000 2

(2 行受影响)
luofenghen 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jinfengyiye 的回复:]
SQL code

select * from tb a where exists (select 1 from tb b where b.part=a.part and b.date=DATEADD(DAY,1,a.date))
and exists(select 1 from tb b where b.part=a.part and b.date=DATEADD(DAY,2,a.date……
[/Quote]
不一定是连续3天的 也可能是连续10天的~
luofenghen 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ssp2009 的回复:]
从你的结果完全看不出是怎么取的,我
[/Quote]

no part date
1 AA 2011-03-15
2 AA 2011-03-16
6 AA 2011-03-17
15,16,17 3天 连着都有记录 就把这3天记录都取出来
3 bb 2011-03-15
4 bb 2011-03-17
5 bb 2011-03-18

只有 17,18 2天连着有记录 15是不连的 所以 不符合 3天 连续的条件

还有一天 连续几天 是不定 的 也可以是连续10天 N天的~
gw6328 2011-03-31
  • 打赏
  • 举报
回复

select * from tb a where exists (select 1 from tb b where b.part=a.part and b.date=DATEADD(DAY,1,a.date))
and exists(select 1 from tb b where b.part=a.part and b.date=DATEADD(DAY,2,a.date))
and exists(select 1 from tb b where b.part=a.part and b.date=DATEADD(DAY,3,a.date)

这个是存在连续三天的头一天的数据。
快溜 2011-03-31
  • 打赏
  • 举报
回复
从你的结果完全看不出是怎么取的,我

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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