sql 中,求员工每一天具体工作的时间!!!!!!

xjtuwjy 2010-08-26 09:59:26
姓名 日期 时间

冯志伟 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离厂就算加班半小时。


非常急,在线等,万分感谢!
...全文
214 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
farrel_h 2010-08-26
  • 打赏
  • 举报
回复
CREATE TABLE TEST_DATA
(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
福来哥 2010-08-26
  • 打赏
  • 举报
回复
冯志伟 2008-6-11 07:34:00
冯志伟 2008-6-11 08:20:00
冯志伟 2008-6-11 08:21:00
冯志伟 2008-6-11 18:16:00

这四条记录处理起来有点麻烦。。。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧