【发布时间】:2019-07-25 18:25:00
【问题描述】:
我有一个表,其中存储工作时间的时间表数据,并且对于每一天,有一个小时列,其中包含当天的工作小时数,因此基于 5 天工作周,在第五天,这 5 天的总数将出现在它旁边的名为“周总计”的列中,如下面的 1 周示例:
TimeIn TimeOut Hours Week Total
---------------------------------------------------------------------------
2019-02-18 07:10:00 2019-02-18 15:50:00 8.17
2019-02-19 07:20:00 2019-02-19 15:41:00 7.85
2019-02-20 06:57:00 2019-02-20 15:50:00 8.38
2019-02-21 07:12:00 2019-02-21 16:03:00 8.35
2019-02-22 07:09:00 2019-02-22 16:05:00 8.43 41.18
在数据库中的任何表中都找不到“周总计”列值,因此我需要编写一个查询来计算每周的值,如果任何一周的总和超过 40,那么将超过 40 的余数与其他周的余数相加。
例如,在上表中,总数为 41.18,假设再过一周,总数为 42.07。由于这些周超过 40 周,超过 40 周的任何额外的总和将是 1.18 + 2.07。因此需要计算每周 5 个工作日。
到目前为止我有:
SELECT
employeeID,
SUM(DATEDIFF([second], [TimeIn], [TimeOut]) / 60.0 / 60.0) AS Hours
FROM
Time
WHERE
TimeIn BETWEEN DATEADD(YEAR, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))
AND DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)
GROUP BY
employeeID
但这只是返回他们的EmployeeID 以及他们在我过滤的日期范围内的全部工作时间。
我如何将其缩小到每周 5 个工作日的总数,以便获得每周工作的总小时数,如果有超过 40 小时,那么将剩余的时间加起来?
【问题讨论】:
标签: sql sql-server