读书人

查找出某一天没有工作求解。该如何处

发布时间: 2012-04-08 14:38:30 作者: rapoo

查找出某一天没有工作,求解。
表名incident:编号,员工名称,工作名称,开始时间,结束时间。

SQL code
select ID,Name,WorkName,RBTime,RFTime from incident

这张表中保存的是某一员工做某项工作的工作时间表。我想查的是某一员工本月中那一天没有事干。大虾们帮下忙新手。

[解决办法]
有无可能时间相互嵌套的?

上个工作1号到5号,
下个工作3号到10号.

是否会这种情况?
一个工作,是否可以跨天
[解决办法]
这个问题应该是求间断问题
http://topic.csdn.net/u/20120325/17/5a53bd46-8870-450a-a9ca-7ef8661e638d.html?1464
[解决办法]
create table incident
(编号 int ,
员工名称 varchar(100),
工作名称 varchar(100),
开始时间 datetime ,
结束时间 datetime)
go

delete from incident

insert into incident
select 1,'aaa','a','2011-3-5','2011-03-06' union
select 1,'aaa','b','2011-3-5','2011-03-07' union
select 1,'aaa','cb','2011-3-9','2011-03-10' union
select 1,'aaa','d','2011-3-11','2011-03-12'

select *
from incident t
where not exists (select 1 from incident where 编号=t.编号 and t.结束时间 between 开始时间-1 and 结束时间 and 工作名称!= t.工作名称)

结果:
1aaab2011-03-05 00:00:00.0002011-03-07 00:00:00.000
1aaad2011-03-11 00:00:00.0002011-03-12 00:00:00.000
[解决办法]
SQL code
select ID,Name,WorkName,RBTime,RFTime from incidentcreate table incident(ID int,Name varchar(32),WorkName varchar(32),RBTime datetime,RFTime datetime)goinsert into incident select 1,'ss','sad','2012-03-01','2012-03-01' union allselect 2,'ss','sad','2012-03-02','2012-03-02' union allselect 3,'ss','sad','2012-03-03','2012-03-03'declare @month_day intset @month_day=datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(getdate()) as varchar)+'-'+cast(month(getdate()) as varchar)+'-01' as datetime))))declare @month_first_day datetimeset @month_first_day= convert(varchar(10),dateadd(dd,-DatePart(day,dateadd(dd,-1,getdate())),getdate()),120)select a.month_day,b.* from (select convert(varchar(10),dateadd(day,number,@month_first_day),120)as month_day from master.dbo.spt_values where type='p' and number <=@month_day)aleft join incident as b on a.month_day=b.RBTime/*month_day    ID    Name    WorkName    RBTime    RFTime2012-03-01    1    ss    sad    2012-03-01 00:00:00.000    2012-03-01 00:00:00.0002012-03-02    2    ss    sad    2012-03-02 00:00:00.000    2012-03-02 00:00:00.0002012-03-03    3    ss    sad    2012-03-03 00:00:00.000    2012-03-03 00:00:00.0002012-03-04    NULL    NULL    NULL    NULL    NULL2012-03-05    NULL    NULL    NULL    NULL    NULL2012-03-06    NULL    NULL    NULL    NULL    NULL2012-03-07    NULL    NULL    NULL    NULL    NULL2012-03-08    NULL    NULL    NULL    NULL    NULL2012-03-09    NULL    NULL    NULL    NULL    NULL2012-03-10    NULL    NULL    NULL    NULL    NULL2012-03-11    NULL    NULL    NULL    NULL    NULL2012-03-12    NULL    NULL    NULL    NULL    NULL2012-03-13    NULL    NULL    NULL    NULL    NULL2012-03-14    NULL    NULL    NULL    NULL    NULL2012-03-15    NULL    NULL    NULL    NULL    NULL2012-03-16    NULL    NULL    NULL    NULL    NULL2012-03-17    NULL    NULL    NULL    NULL    NULL2012-03-18    NULL    NULL    NULL    NULL    NULL2012-03-19    NULL    NULL    NULL    NULL    NULL2012-03-20    NULL    NULL    NULL    NULL    NULL2012-03-21    NULL    NULL    NULL    NULL    NULL2012-03-22    NULL    NULL    NULL    NULL    NULL2012-03-23    NULL    NULL    NULL    NULL    NULL2012-03-24    NULL    NULL    NULL    NULL    NULL2012-03-25    NULL    NULL    NULL    NULL    NULL2012-03-26    NULL    NULL    NULL    NULL    NULL2012-03-27    NULL    NULL    NULL    NULL    NULL2012-03-28    NULL    NULL    NULL    NULL    NULL2012-03-29    NULL    NULL    NULL    NULL    NULL2012-03-30    NULL    NULL    NULL    NULL    NULL2012-03-31    NULL    NULL    NULL    NULL    NULL*/---为NULL就是没有上班或没有事做的日期 


[解决办法]
用循环生成一段时间的连续日期表
然后和数据作比较就可以了
楼主编点数据,这样子我就能给你写个例子了

读书人网 >SQL Server

热点推荐