我有一个sql代码,可以获取每个员工的总工作时间及其超时时间。我想计算他当天的总加班时间。你能帮我吗?8小时是每天的常规时间。
这是代码
SELECT
empno,
date_created,
time_in,
time_out,
time_format(timediff(time_out, time_in), '%H:%i') AS total_time
FROM
(
SELECT empno, date_created,
min(CASE WHEN status = 0 THEN time_created END) time_in,
max(CASE WHEN status = 1 THEN time_created END) time_out
FROM biometrics
WHERE empno = 3
GROUP BY empno, date_created
) t1;
样品输出
empno| date_created | time_in | time_out
2 2013-07-15 11:08:07 15:00:00
3 2013-07-15 11:50:00 NULL
4 2013-07-15 NULL 16:00:00
我想要的是这样的
empno | date_created | time_in | time_out | overtime
2 2013-07-15 5:00:00 15:00:00 2
你可以做这样的事情
SELECT empno, date_created, time_in, time_out,
CASE WHEN total_hours - 8 > 0 THEN total_hours - 8 ELSE 0 END overtime
FROM
(
SELECT empno, date_created, time_in, time_out,
TIME_TO_SEC(TIMEDIFF(COALESCE(time_out, '17:00:00'),
COALESCE(time_in, '09:00:00'))) / 3600 total_hours
FROM
(
SELECT empno, date_created,
MIN(CASE WHEN status = 0 THEN time_created END) time_in,
MIN(CASE WHEN status = 1 THEN time_created END) time_out
FROM biometrics
GROUP BY empno, date_created
) a
) b
这是 SQLFiddle 演示
您需要为提供真正的默认值time_in
,并time_out
针对当他们NULL
。在一个极端的情况下,如果NULL
s是由员工有一天到另一天回家而造成的,那么这些默认值可能分别是00:00:00
和,23:59:59
因为您要计算每个日历日的加班时间。
更新: 如果要overtime
以时间格式显示
SELECT empno, date_created, time_in, time_out,
SEC_TO_TIME(
CASE WHEN total_sec - 28800 > 0
THEN total_sec - 28800
ELSE 0 END) overtime
FROM
(
SELECT empno, date_created, time_in, time_out,
TIME_TO_SEC(TIMEDIFF(COALESCE(time_out, '17:00:00'),
COALESCE(time_in, '09:00:00'))) total_sec
FROM
(
SELECT empno, date_created,
MIN(CASE WHEN status = 0 THEN time_created END) time_in,
MIN(CASE WHEN status = 1 THEN time_created END) time_out
FROM biometrics
GROUP BY empno, date_created
) a
) b
这是 SQLFiddle 演示
问题内容: 我试过重新安装netbeans,试过重新安装java。我不确定发生了什么,但是我从每个类中都随机得到此异常,直到重新启动netbeans。有类似问题的人吗? 跑: 问题答案: 有时,NetBeans本地缓存目录会损坏(由于应用程序更早崩溃或发生其他/未定义的情况)。NetBeans开始表现异常。重新安装没有帮助,因为本地缓存目录并不总是被删除。 如果您100%确定您的应用程序没有路径问
SQL:我有一个在StartTime和EndTime列中包含员工工作时间的表。我想计算每个员工每天的工作时间,即使员工在一天开始轮班,第二天结束。
我有以下数据帧(示例): 我想创建一个名为“斜率”的列,它显示每组每n(n=3)天的斜率。这意味着当第一个日期是“2022-09-01”和3天后用于计算时。斜率可以使用“diff_days”(通过与每组第一个值的差异计算)和“值”列来计算。以下是所需的输出: 以下是一些示例计算,可为您提供一个想法: A组前3天:斜率([0,1,3],[2,1,3])=0.43 A组3天后:斜率([5,6,6],[
准备数据: CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL, day INT(2) UNSIGNED ZEROFILL); INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), (2000,2
问题内容: 可以说我有一个名为’ ‘的mysql表,具有以下值: 我想生成一份报告,说明每天有多少只动物报名(我不在乎一天中的时间)。因此,我从上面的示例表中寻找的最终结果是: 有没有一种方法可以在mysql中执行此操作,或者我需要使用另一种语言(如PHP)来计算总数吗? 任何想法表示赞赏,谢谢 问题答案: 会给您您所追求的。
问题内容: 我有一个有趣的查询需要做。我有一张表,其中有一列包含ip地址编号(使用)和一列。我希望能够计算每天有唯一IP地址列的数量。也就是说,每天有多少个不同的ip行。因此,例如,如果一个IP地址在同一天两次,则在最终计数中将计为1;但是,如果同一IP地址在另一天,则将被计算为第二个计数。 示例数据: 问题答案: SQLFiddle演示