日期:2014-05-18  浏览次数:20612 次

(续)实际问题的请教,急!
我的数据内容如下:

工号             打卡日期             打卡时间

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文,找出的数据都不正确,请大家帮忙,急啊,在线等,


对于如上问题,我已经按照大家提供的方法,就是加一个“迟到”或“正常”的状态字段的方法,部分问题已得到解决,但是我还想要的结果是

不管他是迟到还是正常,我都想显示他的打卡时间。

就是,


工号             日期           时间         状态

001             09.01           08:02       迟到
002             09.01           07:40       正常

请问怎么实现?急,在线等


------解决方案--------------------

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 '

select *,状态=(case when (convert(datetime, 打卡时间, 108)> '1900-01-01 08:00:00 ') then '迟到 ' else '正常 ' end) from T as tmp
where not exists(select 1 from T where 工号=tmp.工号 and 打卡日期=tmp.打卡日期 and 打卡时间 <tmp.打卡时间)