如下的SQL语句,有没有另外的写法:
select attendanceEmloyeeNo ,employeeName ,departmentName ,count(*) as chidaoNum from attendanceState
where not ( datepart(hh,attendanceStartTime) <=departmentStartHour and datepart(mi,attendanceStartTime) <departmentStartMin)
and attendanceEmloyeeNo=001 and attendanceYear=2009
group by attendanceEmloyeeNo,employeeName,departmentName
意思是 签到时间 超过 departmentStartHour 和departmentStartMin,为迟到,查询出相关的信息
select attendanceEmloyeeNo ,employeeName ,departmentName ,count(*) as chidaoNum from attendanceState
where not ( datepart(hh,attendanceStartTime) <=departmentStartHour and datepart(mi,attendanceStartTime) <departmentStartMin)
and attendanceEmloyeeNo=001 and attendanceYear=2009
group by attendanceEmloyeeNo,employeeName,departmentName
意思是 签到时间 超过 departmentStartHour 和departmentStartMin,为迟到,查询出相关的信息
from attendanceState
where datepart(hh,attendanceStartTime) >departmentStartHour and
datepart(mi,attendanceStartTime) >=departmentStartMin
and attendanceEmloyeeNo=001 and attendanceYear=2009
group by
attendanceEmloyeeNo,employeeName,departmentName
from attendanceState
where datepart(hh,attendanceStartTime) <departmentStartHour or (datepart(hh,attendanceStartTime)=departmentStartHour and datepart(mi,attendanceStartTime) <departmentStartMin )
and attendanceEmloyeeNo=001 and attendanceYear=2009
group by attendanceEmloyeeNo,employeeName,departmentName
from attendanceState
where ( datepart(hh,attendanceStartTime) >departmentStartHour
or datepart(mi,attendanceStartTime) >= departmentStartMin)
and attendanceEmloyeeNo=001 and attendanceYear=2009
group by attendanceEmloyeeNo,employeeName,departmentName
attendanceEmloyeeNo ,employeeName ,departmentName ,count(*) as chidaoNum
from
attendanceState
where
( datepart(hh,attendanceStartTime) >departmentStartHour
or datepart(mi,attendanceStartTime) >= departmentStartMin)
and
attendanceEmloyeeNo=001 and attendanceYear=2009
group by
attendanceEmloyeeNo,employeeName,departmentName
select attendanceEmloyeeNo ,employeeName ,departmentName ,count(*) as chidaoNum
from attendanceState
where datepart(hh,attendanceStartTime) >departmentStartHour and
datepart(mi,attendanceStartTime) >=departmentStartMin
and attendanceEmloyeeNo=001 and attendanceYear=2009
group by
attendanceEmloyeeNo,employeeName,departmentName -- 这个好像不对
attendanceEmloyeeNo ,employeeName ,departmentName ,count(*) as chidaoNum
from
attendanceState where
( datepart(hh,attendanceStartTime) >departmentStartHour OR
datepart(mi,attendanceStartTime) >=departmentStartMin) and attendanceEmloyeeNo=001
and attendanceYear=2009
group by attendanceEmloyeeNo,employeeName,departmentName
attendanceEmloyeeNo ,employeeName ,departmentName ,count(*) as chidaoNum
from
attendanceState where
(
abs(datediff(hh,departmentStartHour ,attendanceStartTime)) >0
OR
abs(datediff(mi,departmentStartMin,attendanceStartTime))>=0) and attendanceEmloyeeNo=001
and attendanceYear=2009
group by attendanceEmloyeeNo,employeeName,departmentName
不过这样的话,有计算列不知道效果如果
select datediff(n,'2009-1-1 8:00:00','2009-2-1 8:01:00')%528480
--结果-1
select @minPerDay= datediff(n,'2008-1-1','2008-1-2')
select @minOfDay= datediff(n,'2008-1-1','2008-1-1 8:00:00')select @minPerDay 每天的分钟数
select @minOfDay 截止时间的分钟数--迟到1分
select datediff(n,0,'2009-1-30 8:01:00')%@minPerDay-@minOfDay
--早到1分
select datediff(n,0,'2010-3-1 7:59:59')%@minPerDay-@minOfDay
select attendanceEmloyeeNo ,employeeName ,departmentName ,count(*) as chidaoNum
from attendanceState
where ( datepart(hh,attendanceStartTime) >departmentStartHour
or datepart(mi,attendanceStartTime) >= departmentStartMin)
and attendanceEmloyeeNo=001 and attendanceYear=2009
group by attendanceEmloyeeNo,employeeName,departmentName
问题出在:
( datepart(hh,attendanceStartTime) >departmentStartHour or datepart(mi,attendanceStartTime) >= departmentStartMin)
建议改成如:
( datepart(hh,attendanceStartTime) >departmentStartHour or (datepart(hh,attendanceStartTime) =departmentStartHour and datepart(mi,attendanceStartTime) > departmentStartMin))