sql求助

昨天 2012-04-22 03:33:14
如何判断一年连续请假七天以上。显示数据
有张请假表A(工号,日期),假期表(日期,假期名称)
例如:1-7 号叫连续请假,如何是1-5号 7-8号请假就不算连续。星期六,星期日不过滤
有特殊假期过滤:例如五一、五二、五三请假不算,要排除假期表日期
工号 日期
例如: 10729 2011-2-1
10729 2011-2-2
10729 2011-2-3
10729 2011-2-4
10729 2011-2-5
20321 2011-2-8

显示 10729
求sql2000代码。谢谢
...全文
109 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
realgz 2012-04-22
  • 打赏
  • 举报
回复
不好意思很久不写了上面的还是错
select a.学号,a.日期,(b.日期) from t a join t b
on datediff(day,a.日期,b.日期)>=6
where (select count(distinct c.日期) from t c
where c.日期 between a.日期 and b.日期 )
= datediff(day,a.日期,(b.日期))+1
--得到所有可能的组合,呀哦扎哦到最大还要二次过滤,除非做个辅助表不然够不好做
realgz 2012-04-22
  • 打赏
  • 举报
回复
上面写错了错得离谱

select a.工号,a.日期,max(b.日期) from table a join table b
on datediff(day,a.日期,b.日期)>=7
group by a.工号,a.日期
having (select count(distinct c.日期) from table c
where c.日期 between a.日期 and b.日期 )
= datediff(day,a.日期,max(b.日期))+1
realgz 2012-04-22
  • 打赏
  • 举报
回复
不好写...最好别用纯sql,
非要,写个游标吧
当然貌似也可以这么干:
elect a.工号,a.日期,b.日期 from table a join table b
on datediff(day,a.日期,b.日期)>=7
group by a.工号,a.日期,b.日期
having count(distinct b.日期) = datediff(day,a.日期,b.日期)
得到所有大于等于7天的组合

恶心一点貌似还可以直接得到最大的组合,不过消耗更大了

11,849

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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