如何分组时间段并检查休息时间

 hareleemu_699 发布于 2023-02-09 14:06

我有一个存储功能,可以提取所有员工的时钟信息.我正试图提出一份例外报告来审核午餐.我当前的查询一次构建所有信息1段.

SELECT        ftc.lEmployeeID, ftc.sFirstName, ftc.sLastName, ftc.dtTimeIn,
              ftc.dtTimeOut, ftc.TotalHours, ftc.PunchedIn, ftc.Edited
FROM          dbo.fTimeCard(@StartDate, @EndDate, @DeptList,
                            @iActive, @EmployeeList) AS ftc
              LEFT OUTER JOIN Employees AS e ON ftc.lEmployeeID = e.lEmployeeID
WHERE        (ftc.TotalHours >= 0) AND (ftc.DID IS NOT NULL) OR
                         (ftc.DID IS NOT NULL) AND (ftc.dtTimeOut IS NULL)

这个输出看起来像这样:

24  Bob bibby   8/2/2013 11:55:23 AM    8/2/2013 3:36:44 PM 3.68
24  bob bibby   8/2/2013 4:10:46 PM 8/2/2013 8:14:30 PM 4.07
39  rob blah    8/2/2013 8:01:57 AM 8/2/2013 5:01:40 PM 9.01
41  john    doe 8/2/2013 10:09:58 AM    8/2/2013 1:33:38 PM 3.4 
41  john    doe 8/2/2013 1:55:56 PM 8/2/2013 6:10:15 PM 4.25

我需要查询来做两件事.

1)将每个段组合在一起.2)在新的列中报告"休息时间"

获得该信息后,我需要检查每个细分的小时数,并确保发生两件事.

1)如果他们共工作了6个小时,他们是否会休息30分钟?2)如果他们休息一下,他们会休息> 30分钟.

你看到鲍勃在上午11点55分打了一拳,并在3点36分打了一顿午餐.他于4点10分午餐时冲了上来,并于8点14分拳打脚踢.他共工作了7.75小时,并且休息了34分钟.他在这里很好.而且我不想报告例外情况

约翰总共工作了7.65个小时.然而,当他拳打脚踢时,他只吃了22分钟的午餐.我需要报告"吉姆只吃了22分钟的午餐"

你也会看到抢劫工作了9个小时,没有休息.我需要报告"抢劫工作超过6小时且没有休息"

我想如果我能完成对2段的分组.然后我可以处理报告方面.

*更新**

我更改了查询以尝试完成此操作.以下是我当前的查询:

SELECT        ftc.lEmployeeID, ftc.sFirstName, ftc.sLastName, ftc.TotalHours, DATEDIFF(mi, MIN(ftc.dtTimeOut), MAX(ftc.dtTimeIn)) AS Break_Time_Minutes
FROM            dbo.fTimeCard(@StartDate, @EndDate, @DeptList, @iActive, @EmployeeList) AS ftc LEFT OUTER JOIN
                         Employees AS e ON ftc.lEmployeeID = e.lEmployeeID
WHERE        (ftc.TotalHours >= 0) AND (ftc.DID IS NOT NULL) OR
                         (ftc.DID IS NOT NULL) AND (ftc.dtTimeOut IS NULL)
GROUP BY ftc.lEmployeeID, ftc.sFirstName, ftc.sLastName, ftc.TotalHours

我的输出目前看起来像这样:

24  Bob bibby   3.68    -221
24  bob bibby   4.07    -244
39  rob blah    0.05    -3
39  rob blah    2.63    -158
41  john    doe 3.4 -204
41  john    doe     4.25    -255

正如您所看到的那样,它没有按日期组合细分,而Break_time显示为负分钟.它也没有结合日子.鲍勃的时间应该在1行.并显示7.75分钟的休息时间应为34分钟.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有