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

跪求SQL统计考勤方法
我想通过上下班时间统计出某人每月上班迟到的次数,9点开始上班,starttime,endtime都为datetime类型,例如
  name starttime endtime  
  lily 2009-1-1 9:00:00 2009-1-1 9:10:00


请问该如何实现?哪位大侠若知道方法,麻烦告诉一下,不甚感激。

------解决方案--------------------
题目没看的不是很明白..那个starttime,endtime都是什么日期啊, 上下班日期???
------解决方案--------------------
那员工的实际上班时间总得有个字段吧
------解决方案--------------------
SQL code
select 
  name,
  sum(case when datepart(hh,endtime)>9 then 1 else 0 end) as 迟到次数
from 
  tb
group by
  name

------解决方案--------------------
这样??
SQL code
-- =============================================
-- Author:      T.O.P
-- Create date: 2009/11/26
-- Version:     SQL SERVER 2005
-- =============================================
declare @TB table([name] varchar(4),[starttime] datetime,[endtime] datetime,[wtime] datetime)
insert @TB
select 'lily','2009-1-1 9:00:00','2009-1-1 9:10:00','2009-1-1 9:02:00' union all
select 'lily','2009-1-1 9:00:00','2009-1-1 9:10:00','2009-1-1 9:02:00' union all
select 'lily','2009-1-1 9:00:00','2009-1-1 9:10:00','2009-1-1 8:02:00' union all
select 'lily','2009-1-1 9:00:00','2009-1-1 9:10:00','2009-1-1 8:02:00' union all
select 'lily','2009-1-1 9:00:00','2009-1-1 9:10:00','2009-1-1 8:02:00' union all
select 'lily','2009-1-1 9:00:00','2009-1-1 9:10:00','2009-1-1 9:02:00'

select count(*) as 迟到次数
from @TB
where wtime between starttime and [endtime]


--测试结果:
/*
迟到次数
-----------
3

(1 row(s) affected)

*/

------解决方案--------------------
select count(*) from 表名 where starttime between (上班时间,下班时间) or endtime between (上班时间,下班时间)
------解决方案--------------------
SELECT DATETIME(HOUR,STARTTME,ENDTIME) 取时差,
SELECT DATEDIFF(MINUTE,GETDATE(),'2009-11-26 12:00') 取分差。
像是你要加入条件来判断午休时间。
这就是我的建议,
------解决方案--------------------
SQL code

楼主最好把考勤表的结构和测试数据写出来,这样才能更好更快的解决问题!O(∩_∩)O哈哈~

------解决方案--------------------
如果是统计是否迟到,写一个函数,取上班时间,用CONVERT(NVARCHAR(12),GETDATE(),120)取到当前日期。假如这个函数叫GETSTANDARDTIME()。

可以用SELECT * FROM TABLE WHERE DATEDIFF(MINUTE,GETSTANDRDTIME(),STARTTIME)<0 这个就是迟到的,当然,你也可以用前台程序来处理标准上班时间。


上一条回复的函数也是DATEDIFF,我写错了,抱歉
------解决方案--------------------
其实 不必要这样头痛医头脚痛医脚的
你写一个考勤数据分析的程序 分析出每人每日的考勤信息
如果 你需要统计一段时间内的某样考勤信息时 你只需要汇总统计一下日报表的数据
这样处理能提供比较灵活的报表处理形式 而且你不必要在每次统计的时候又去分析原始数据
当领导需要某一样功能时 你只需要在日考勤报表中增加这个分析统计功能就可以了
这样既方便又灵活 我建议你这样做