SQL查询日期连续

rongguo52013 2011-09-21 02:57:34
有这样一个数据库
姓名 旷工日期
张三 2011-9-14
张三 2011-9-15
张三 2011-9-16
李四 2011-9-10
李四 2011-9-12
李四 2011-9-14
张三 2011-9-20
显示连续旷工三天以上的数据,如张三14,15,16三天旷工的数据,并且计算连续旷工的次数
...全文
273 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
way_long 2011-12-19
  • 打赏
  • 举报
回复
请问楼上,可以改成SQL2000版的吗,WITH AS 语句在能在SQL2005里面可以用
-晴天 2011-09-21
  • 打赏
  • 举报
回复
create table tb(姓名 nvarchar(10),旷工日期 datetime)
insert into tb select '张三','2011-9-14'
insert into tb select '张三','2011-9-15'
insert into tb select '张三','2011-9-16'
insert into tb select '李四','2011-9-10'
insert into tb select '李四','2011-9-12'
insert into tb select '李四','2011-9-14'
insert into tb select '张三','2011-9-20'
go
;with cte as(
select *,1 as 连续旷工天数 from tb a where not exists(select 1 from tb where 姓名=a.姓名 and datediff(d,旷工日期,a.旷工日期)=1)
union all
select a.*,b.连续旷工天数+1 from tb a inner join cte b on a.姓名=b.姓名 and datediff(d,b.旷工日期,a.旷工日期)=1
)select * from cte order by 1,2
/*
姓名 旷工日期 连续旷工天数
---------- ----------------------- -----------
李四 2011-09-10 00:00:00.000 1
李四 2011-09-12 00:00:00.000 1
李四 2011-09-14 00:00:00.000 1
张三 2011-09-14 00:00:00.000 1
张三 2011-09-15 00:00:00.000 2
张三 2011-09-16 00:00:00.000 3
张三 2011-09-20 00:00:00.000 1

(7 行受影响)

*/
go
drop table tb


oO寒枫Oo 2011-09-21
  • 打赏
  • 举报
回复

select name , not_worktime
from tablename t
where exists(select 1 from tablename where datediff(day,t.not_worktime,not_worktime)=1)
and exists(select 1 from tablename where datediff(day,t.not_worktime,not_worktime)=2)
geniuswjt 2011-09-21
  • 打赏
  • 举报
回复
建议给出想要的结果,猜很累
-晴天 2011-09-21
  • 打赏
  • 举报
回复
create table tb(姓名 nvarchar(10),旷工日期 datetime)
insert into tb select '张三','2011-9-14'
insert into tb select '张三','2011-9-15'
insert into tb select '张三','2011-9-16'
insert into tb select '李四','2011-9-10'
insert into tb select '李四','2011-9-12'
insert into tb select '李四','2011-9-14'
insert into tb select '张三','2011-9-20'
go
select a.姓名,a.旷工日期,b.旷工日期,c.旷工日期
from tb a inner join tb b on a.姓名=b.姓名 and datediff(d,a.旷工日期,b.旷工日期)=1
inner join tb c on c.姓名=b.姓名 and datediff(d,b.旷工日期,c.旷工日期)=1
/*
姓名 旷工日期 旷工日期 旷工日期
---------- ----------------------- ----------------------- -----------------------
张三 2011-09-14 00:00:00.000 2011-09-15 00:00:00.000 2011-09-16 00:00:00.000

(1 行受影响)

*/
go
drop table tb

chuanzhang5687 2011-09-21
  • 打赏
  • 举报
回复
+1[Quote=引用 2 楼 fredrickhu 的回复:]
见过N回了
[/Quote]
--小F-- 2011-09-21
  • 打赏
  • 举报
回复
见过N回了
-晴天 2011-09-21
  • 打赏
  • 举报
回复
不是前几天有过这个问题的么....

22,300

社区成员

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

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