姓名 日期 时间冯志伟 2008-6-5 07:31:00
冯志伟 2008-6-5 18:32:00
冯志伟 2008-6-6 07:34:00
冯志伟 2008-6-6 17:08:00
冯志伟 2008-6-10 07:33:00
冯志伟 2008-6-10 17:48:00
冯志伟 2008-6-11 07:34:00
冯志伟 2008-6-11 08:20:00
冯志伟 2008-6-11 08:21:00
冯志伟 2008-6-11 18:16:00
冯志伟 2008-6-12 07:35:00
冯志伟 2008-6-12 19:20:00
如上,是员工在6月份某几天的打卡记录,其中有三个字段:姓名、日期、时间,求员工每一天具体工作的时间。 有如下要求:
1、进厂:7:00-8:00AM间按正常上班时间开始计,7:00AM前进厂按实际入厂减7:00AM的工时计算;
例如:6:50进厂就算提前加班半小时,7:10进厂就不算加班。
2、中午:只要在上午进厂,下午离厂,中间均减1.5小时的休息时间;
3、离厂时间:17:00-17:30间离厂均按正常下班计,超出17:30离厂按实际离厂减17:30的工时计算。
例如:17:25离厂就不算加班,18:00离厂就算加班半小时。
非常急,在线等,万分感谢!
冯志伟 2008-6-5 18:32:00
冯志伟 2008-6-6 07:34:00
冯志伟 2008-6-6 17:08:00
冯志伟 2008-6-10 07:33:00
冯志伟 2008-6-10 17:48:00
冯志伟 2008-6-11 07:34:00
冯志伟 2008-6-11 08:20:00
冯志伟 2008-6-11 08:21:00
冯志伟 2008-6-11 18:16:00
冯志伟 2008-6-12 07:35:00
冯志伟 2008-6-12 19:20:00
如上,是员工在6月份某几天的打卡记录,其中有三个字段:姓名、日期、时间,求员工每一天具体工作的时间。 有如下要求:
1、进厂:7:00-8:00AM间按正常上班时间开始计,7:00AM前进厂按实际入厂减7:00AM的工时计算;
例如:6:50进厂就算提前加班半小时,7:10进厂就不算加班。
2、中午:只要在上午进厂,下午离厂,中间均减1.5小时的休息时间;
3、离厂时间:17:00-17:30间离厂均按正常下班计,超出17:30离厂按实际离厂减17:30的工时计算。
例如:17:25离厂就不算加班,18:00离厂就算加班半小时。
非常急,在线等,万分感谢!
解决方案 »
- MS sql server 维护人员
- 有关openrowset
- sql server 2008
- 在安装了SQL Server 2005的电脑上能不能再安装SQL Server 2008 R2
- 如何用SQL语句实现:从表A中选择部分字段插入到表B中去?(急啊!)
- 变量:'101,103,107' 与 表中一个字段 值'101, 102, 103, 107' 进行比较 取字段包含所有变量的记录 sql 语句怎么写?
- 存储过程实现取出刚插入数据的编号
- SQL语句怎么写????
- oracle的全文检索怎么实现?
- 这个sql查询语句有点麻烦,谢谢了.
- 一条复杂的sql请高手帮忙
- 这个查询有点晕,数据比对问题,请教高手
(NAME VARCHAR(255),
LOG_DATE DATETIME)INSERT INTO TEST_DATA
SELECT 'FENZHIWEI','2008-6-5 07:31:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-5 18:32:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-6 07:34:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-6 17:08:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-10 07:33:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-10 17:48:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-11 07:34:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-11 08:20:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-11 08:21:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-11 18:16:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-12 07:35:00'
UNION ALL
SELECT 'FENZHIWEI','2008-6-12 19:20:00'--筛选多打卡的记录
select NAME,MAX(LOG_DATE) AS END_TIME,MIN(LOG_DATE) AS BEGIN_TIME INTO #TEMP FROM TEST_DATA
GROUP BY NAME,CONVERT(VARCHAR(10),LOG_DATE,120)ALTER TABLE #TEMP
ADD END_TIME_FORMAT DATETIME,
BEGIN_TIME_FORMAT DATETIME--格式化上下班时间
UPDATE A
SET A.BEGIN_TIME_FORMAT = CASE WHEN BEGIN_TIME BETWEEN
CONVERT(DATETIME,CONVERT(VARCHAR(10),BEGIN_TIME,120)+' 07:00:00') AND
CONVERT(DATETIME,CONVERT(VARCHAR(10),BEGIN_TIME,120)+' 08:00:00')
THEN CONVERT(DATETIME,CONVERT(VARCHAR(10),BEGIN_TIME,120)+' 08:00:00')
ELSE BEGIN_TIME END,
A.END_TIME_FORMAT = CASE WHEN END_TIME BETWEEN
CONVERT(DATETIME,CONVERT(VARCHAR(10),END_TIME,120)+' 17:00:00') AND
CONVERT(DATETIME,CONVERT(VARCHAR(10),END_TIME,120)+' 17:30:00')
THEN CONVERT(DATETIME,CONVERT(VARCHAR(10),END_TIME,120)+' 17:00:00')
ELSE END_TIME END
FROM #TEMP A--获取工作时间(分钟计)
select *,DATEDIFF(mi,BEGIN_TIME_FORMAT,END_TIME_FORMAT)-90 AS WORK_TIME FROM #TEMP