Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取基于一周中某一天的总工作时间_Mysql - Fatal编程技术网

Mysql 获取基于一周中某一天的总工作时间

Mysql 获取基于一周中某一天的总工作时间,mysql,Mysql,我想检查员工的每日工作时间是否少于分配的总工作时间 例如,员工1被分配工作: Day | Total working hours mon | 10 tue | 10 wed | 10 thu | 10 fri | 10 sat | 0 sun | 0 我的员工1的总工作时间如下: Start | End | Total Hours Worked 2018-07-02 00:28:29 | 2018-07-02 04:1

我想检查员工的每日工作时间是否少于分配的总工作时间

例如,员工1被分配工作:

Day | Total working hours
mon | 10
tue | 10
wed | 10
thu | 10
fri | 10
sat | 0
sun | 0
我的员工1的总工作时间如下:

Start               | End                         | Total Hours Worked
2018-07-02 00:28:29 | 2018-07-02 04:12:17         | 3.72 
2018-07-05 00:26:20 | 2018-07-05 05:03:23         | 4.62 
2018-07-12 00:27:35 | 2018-07-12 10:21:08         | 9.88
我面临的问题是要知道根据日期检查一周中的哪一天的总工作时间。e、 g.2018-07-02是星期一,因此员工的总工作时间应为10小时,但员工的总工作时间仅为3.72小时。因此,2018-07-02年度员工未完成分配的总工作时间

预期的查询结果应返回:

Short Working Hour Date 
2018-07-02
2018-07-05
2018-07-12

感谢你们的帮助。谢谢我找到了一个方法,可以参考手册。但是看起来很乱

SELECT
    start,
    end,
    total_hours_worked
FROM mytable
GROUP BY DATE(start), DATE(end)
having CASE 
    WHEN DAYOFWEEK(MIN(start))=1 and total_hours_worked < 0   THEN 1 
    WHEN DAYOFWEEK(MIN(start))=2 and total_hours_worked < 10  THEN 1 
    WHEN DAYOFWEEK(MIN(start))=3 and total_hours_worked < 10  THEN 1 
    WHEN DAYOFWEEK(MIN(start))=4 and total_hours_worked < 10  THEN 1 
    WHEN DAYOFWEEK(MIN(start))=5 and total_hours_worked < 10  THEN 1 
    WHEN DAYOFWEEK(MIN(start))=6 and total_hours_worked < 10  THEN 1 
    WHEN DAYOFWEEK(MIN(start))=7 and total_hours_worked < 0   THEN 1 
    ELSE 0 
END;

我不太明白你到底想要什么,所以这里有一个不完整的解决方案

DROP TABLE employee_assignments;

CREATE TABLE employee_assignments
(day CHAR(3) NOT NULL PRIMARY KEY
,total_working_hours INT NOT NULL DEFAULT 0
);

INSERT INTO employee_assignments VALUES
('mon',10),
('tue',10),
('wed',10),
('thu',10),
('fri',10),
('sat',0),
('sun',0);

DROP TABLE timesheet;

CREATE TABLE timesheet
(start DATETIME NOT NULL PRIMARY KEY
,end  DATETIME NOT NULL 
);

INSERT INTO timesheet VALUES
('2018-07-02 00:28:29','2018-07-02 04:12:17'),
('2018-07-05 00:26:20','2018-07-05 05:03:23'),
('2018-07-12 00:27:35','2018-07-12 10:21:08');

SELECT t.*
     , (TIME_TO_SEC(t.end)-TIME_TO_SEC(t.start))/3600 n 
     , a.*
  FROM timesheet t
  JOIN employee_assignments a
    ON a.day = DATE_FORMAT(t.start,'%a');

+---------------------+---------------------+--------+-----+---------------------+
| start               | end                 | n      | day | total_working_hours |
+---------------------+---------------------+--------+-----+---------------------+
| 2018-07-02 00:28:29 | 2018-07-02 04:12:17 | 3.7300 | mon |                  10 |
| 2018-07-05 00:26:20 | 2018-07-05 05:03:23 | 4.6175 | thu |                  10 |
| 2018-07-12 00:27:35 | 2018-07-12 10:21:08 | 9.8925 | thu |                  10 |
+---------------------+---------------------+--------+-----+---------------------+

“你试过什么吗?”草莓不,我没有。还figuring@Strawberry你知道吗?是的,看看手册: