考勤打卡处理的一个SQL例句

1. 上班打卡记录表,如下设置

工号 日期 时间
00001 2004-01-01 8:00

其中,每行数据为一次打卡记录,条件如下:
1、 如果某工号在一天内打卡一次,作无效处理。
2、 如果某工号在一天内打卡两次,两次之间时间大于5小时算一次有效上班。
3、 如果某工号在一天内打卡3次或以上,取最大和最小时间之差,大于5小时算一次有效上班。
4、 不考虑跨天情况。

问题:
通过一条sql语句,统计出每个工号在2004年第一季度中,每月的有效上班次数。(怎么想一条也不够呀)

---------------------------------------------------------------

select 工号,month(日期) as 月份,count(*) as 上班次数
from ( select 工号,日期
from tablename
where 日期 between '2004-1-1' and '2004-3-31'
group by 工号,日期
having datediff(hour,min(时间),max(时间)>=5
) a
group by 工号,month(日期)

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus