我需要选择一天内的总小时数.先入后出.使用SQL查询



如何编写带有此问题的查询代码。我需要选择一天内的总小时数。从先入后出再求和从date_01到date_16这段时间是15天。

[EmployeeID]   [Att_Date]
01            2022-02-01 07:39:12
01            2022-02-01 19:39:12
01            2022-02-02 08:39:12
01            2022-02-02 19:00:12
01            2022-02-03 08:00:12
01            2022-02-03 19:00:12
02            2022-02-02 08:00:12
02            2022-02-02 19:39:12... (Raj Marvic)

我在下面尝试了这个代码,但它只计算了从第一个输入日期到最后一个输出日期的总小时数,这是错误的。我需要先计算每天的总时间,来计算从第一个进入日期到最后一个离开日期的总小时数。

SELECT EmployeeID, 
TIMESTAMPDIFF(hour, MIN(Att_Date),MAX(Att_Date)) AS diff_in_hours
FROM att_details 
GROUP BY EmployeeID;

我认为您错过正确总数的原因是因为MIN((和MAX((得到的是最早的日期/时间与最晚的日期/日期/时间,它们跨越了多天。我认为你想要得到的是每天的总和,比如一周内的总和,或者多天的跨度。也就是说,您的第一个查询应该按员工AND Date(没有时间上下文(分组,然后对结果求和。有一条警告没有提到。。。一名员工是否有可能在一天内多次打卡上班/下班,例如将午餐时间排除在总工作日之外?如果是这样的话,就需要考虑到这一点。

select
EmployeeID,
Sum( DailyHours ) TotalHours
from
( SELECT 
EmployeeID, 
Date( Att_Date ) SingleDay,
TIMESTAMPDIFF(hour, MIN(Att_Date),MAX(Att_Date)) AS DailyHours
FROM 
att_details 
GROUP BY 
EmployeeID,
Date( Att_Date ) ) PQ
group by
EmployeeID

使用聚合和DATEDIFF,我们可以尝试:

SELECT
[Employee ID],
DATEDIFF(hour, MIN([Date/time]), MAX([Date/time])) AS diff_in_hours
FROM yourTable
GROUP BY
[Employee ID];

最新更新