我有一个查询,它会运行一个函数来抓取员工信息。它拉的时间段,将它们组合为特定的某一天,他们运行一个检查,看看Datediff在休息时间查找差异
1)谁没有休息的那一天 2)谁休息了不到30分钟
的第一部分工作正常。它显示了一周中没有休息的7人(全部休息0分钟)。但是,它不显示只需要22分钟休息时间的用户。我相信发生了什么,它是不是完全结合了特定日子的所有时间信息。它只是将那些没有休息的人的信息结合起来。任何帮助?
我的查询是:
SELECT lEmployeeID, NUM_Hours, CASE WHEN tmp.Break_Time_Minutes < 0 THEN 0 ELSE Break_Time_Minutes END AS Break_Time_Minutes,
CASE WHEN tmp.Break_Time_Minutes < 0 THEN 1 ELSE 0 END AS SkippedBreak, sFirstName, sLastName, TotalHours
FROM (SELECT employee.lEmployeeID, employee.sFirstName, employee.sLastName, employee.TotalHours, ROUND(SUM(DATEDIFF(second, employee.dtTimeIn,
employee.dtTimeOut)/60.0/60.0), 1) AS NUM_Hours, DATEDIFF(mi, MIN(employee.dtTimeOut), MAX(employee.dtTimeIn)) AS Break_Time_Minutes
FROM dbo.fTimeCard(@StartDate, @EndDate, @DeptList, @iActive, @EmployeeList) AS employee LEFT OUTER JOIN
Employees AS e ON employee.lEmployeeID = e.lEmployeeID
WHERE (employee.TotalHours >= 0) AND (employee.DID IS NOT NULL) OR
(employee.DID IS NOT NULL) AND (employee.dtTimeOut IS NULL)
GROUP BY employee.lEmployeeID, employee.sLastName, employee.sFirstName, employee.TotalHours, CAST(employee.dtTimeIn AS Datetime)) AS tmp
WHERE (NUM_Hours > 6) AND (Break_Time_Minutes < 30)
您的查询未neccessary complicated.in您的最后一个职位,我建议在你的exisitng查询(最后一篇) ,在同一个查询中用datediff创建一个多列,并且现在显示同样的内容。不需要group by或sum。 – KumarHarsh
我必须合并细分......我只想报告那些休息时间少于30分钟的人,包括那些根本没有参加过的人。我还需要报告没有充分休息的总工作小时数 – Shmewnix
首先您在同一个查询中用datediff创建另一列,之后您将使用GROUP BY employee.lEmployeeID的工作和总计工作组合在一起。这就是为什么我要告诉显示你最后的帖子查询很简单。 – KumarHarsh