获取一天的总工作时间,总小时数,总小时数mysql [重复]
Posted
技术标签:
【中文标题】获取一天的总工作时间,总小时数,总小时数mysql [重复]【英文标题】:Get total hours worked in a day, total in hours, total out hours mysql [duplicate] 【发布时间】:2016-11-25 05:27:57 【问题描述】:我有一个 mysql 表,其中记录了员工进出时间。
id device_id punch stat_log
1 26 2016-11-23 11:30:05 in
2 26 2016-11-23 14:30:05 out
3 26 2016-11-23 15:00:05 in
4 26 2016-11-23 20:32:05 out
是否可以使用单个查询从用户工作的总小时数中检索总小时数和总小时数?
我使用了以下查询:
SELECT
device_id as d_id,
date(run_start) as start_date,
sum(elapsed_min)/60.0 as hrs_on,
24 - sum(elapsed_min)/60.0 as hrs_off
FROM
(SELECT *, TIMESTAMPDIFF(minute, run_start, run_end) elapsed_min
FROM
(SELECT t1.device_id, t1.punch as run_start,
(SELECT MIN(punch)
FROM emp_punch_in_out t2
LEFT JOIN emp_map e ON e.device_id = t2.device_id
WHERE t2.device_id = t1.device_id
AND t2.punch > t1.punch
AND t2.stat_log = 'out') as run_end
FROM emp_punch_in_out t1
WHERE t1.device_id = 26 AND t1.stat_log = 'in') t
) tt
GROUP BY device_id, start_date
ORDER BY device_id, start_date
从这个查询中我得到如下结果:
#ID device_id Date In_hours Out_hours
1 26 2016-11-23 8.5333 15.4667
但我想要的结果是总小时数和一天中工作时间的总小时数,包括休息时间。
期望的输出
#ID device_id Date In_hours Out_hours
1 26 2016-11-23 8.5333 0.30
【问题讨论】:
请包含您想要的结果集 好的。感谢@AnkitAgrawal 的回复。我想要的结果是 in_hours 是 9 小时,然后是 o.30 小时 我在几个小时内完美,但在下班时间却出错了。它给出了从 24 小时开始的总小时数 总数签入和签出将只有 4 个?? 它可以超过 4 个。emp 可以像喝茶/咖啡一样休息更多,所以它会包含在下班时间。 【参考方案1】:假设你的输入表叫Table1
:
Select device_id,
Date(punch) As "Date",
Sum(Case When stat_log = 'out' Then TimeStampDiff(minute, punch, next_punch) Else 0 End)/60 As out_hours,
Sum(Case When stat_log = 'in' Then TimeStampDiff(minute, punch, next_punch) Else 0 End)/60 As in_hours
From (
Select id, device_id, punch, stat_log,
(Select punch
From Table1 As n
Where n.device_id = c.device_id
And n.punch > c.punch
And Date(n.punch) = Date(c.punch)
Order By punch asc
Limit 1) As next_punch
From Table1 As c) As x
Group By device_id, Date(punch);
编辑
在连接谓词中添加了And Date(n.punch) = Date(c.punch)
,以便它可以持续多天。
【讨论】:
请注意,我没有添加id
字段,因为它似乎毫无意义。
'26', '2016-11-23', '0.5000', '8.5333'
完美 :-) 谢谢@mendosi
是的@kapil.dev 我想要的结果。
@MilanSoni 注意编辑!我的测试输入数据只涵盖了一天,所以我没想过要加入日期,否则一天结束的“出”将匹配第二天的第一个“入”。以上是关于获取一天的总工作时间,总小时数,总小时数mysql [重复]的主要内容,如果未能解决你的问题,请参考以下文章