实际问题的请教,急!
我的数据内容如下:
工号 打卡日期 打卡时间
001 2006.09.08 07:40:09
001 2006.09.08 08:09:00
002 2006.09.08 08:09:00
001 2006.09.09 08:09:09
.
.
如上是上班打卡记录,假设我们上班时间是8点的话,我要找出每天迟到的人,就是说我要找出每天第一次打卡时间是8点之后的人,现在我写的query文,找出的数据都不正确,请大家帮忙,急啊,在线等,
------解决方案--------------------declare @ta table(工号 varchar(3), 打卡日期 varchar(10), 打卡时间 varchar(8))
insert @ta
select '001 ', '2006.09.08 ', '07:40:09 ' union all
select '001 ', '2006.09.08 ', '08:09:00 ' union all
select '002 ', '2006.09.08 ', '08:09:00 ' union all
select '001 ', '2006.09.09 ', '08:09:09 '
select * from @ta a
where not exists(select 1 from @ta where 工号=a.工号 and 打卡日期=a.打卡日期 and 打卡时间 <a.打卡时间)
and 打卡时间> '08:00:00 '
(4 行受影响)
工号 打卡日期 打卡时间
---- ---------- --------
002 2006.09.08 08:09:00
001 2006.09.09 08:09:09
(2 行受影响)
------解决方案----------------------子查询????
--没必要
create table T(工号 varchar(10), 打卡日期 datetime, 打卡时间 varchar(10))
insert T select '001 ', '2006-09-08 ', '07:40:09 '
union all select '001 ', '2006-09-08 ', '08:09:00 '
union all select '002 ', '2006-09-08 ', '08:09:00 '
union all select '001 ', '2006-09-09 ', '08:09:09 '
union all select '001 ', '2006-09-09 ', '18:09:09 '
select 工号,CONVERT(varchar(10),打卡日期,120),
case when min(打卡时间)> '08:00:00 ' then '迟到 ' else '正常 ' end
from t group by 工号, CONVERT(varchar(10),打卡日期,120)