【发布时间】:2013-12-20 19:18:00
【问题描述】:
我有一个查询,我试图让用户休息时间。我想我可以只使用第一次打卡时间和第二次打卡时间,并使用日期差异来划分每个员工。然而,它正在做的是抓住 FIRST 打卡吃午饭,以及最后一个用户打卡一天。我如何让它按员工列出每个员工的休息时间。以下是我的查询:
SELECT lEmployeeID,
DATEDIFF(mi, MIN(dtTimeOut), MAX(dtTimeIn)) AS Break_Time
FROM dbo.fTimeCard(@StartDate, @EndDate, @DeptList, @iActive, @EmployeeList) AS ftc
WHERE (TotalHours >= 0)
AND (DID IS NOT NULL)
OR (DID IS NOT NULL)
AND (dtTimeOut IS NULL)
GROUP BY lEmployeeID
【问题讨论】:
-
真正有用的答案取决于有关您的数据库架构的更多信息。单行包含什么?您是想为所有用户还是只为一个用户安排休息时间?您是否需要仅查看“今天”或过去某个日期或日期范围的休息时间?
-
大概休息时间是一天中发生的打卡/打卡,因此您需要确定哪些打卡代表实际的早上到达/下午离开,排除那些特定事件,然后将白天的其他进/出事件用作休息时间。
-
我使用的是日期范围。所有用户的休息时间。用户进出时的 dttimein 和 dttimeout 房屋。所以我 8 点打卡 12 点打卡 1230 点 5 点打卡。我工作了 8.5 小时,休息了 30 分钟
-
假设员工只休息一次,您的查询应该只针对每个员工进行。您需要按employeeId 和date 分组,即。 date(Timein) 获取每天的结果。此外,将日期时间转换为 24 小时制。执行 datefiff 之前的格式 - DATEDIFF(mi, MIN(convert(datetime,dtTimeOut,9)), MAX(convert(datetime,dtTimeIn,9)))
-
我认为我们需要查看该表值函数,以及它返回的示例。
标签: sql sql-server tsql sql-server-2005