Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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_Doctrine - Fatal编程技术网

Mysql 在一个查询中对另一个关系表进行求和和和减法

Mysql 在一个查询中对另一个关系表进行求和和和减法,mysql,doctrine,Mysql,Doctrine,我有两个表,一个称为出勤,另一个称为时间片,我试图从当前一周的时间片中减去总的出勤秒数,同时也使用原则。 我必须得到行,但我必须从查询中求和和和减去每一行,但我需要学会在一个查询中做到这一点 这是出席人数表的结构: SELECT * FROM attendance; +----+---------+---------------------+--------+---------------------+---------------------+ | id | user_id | day

我有两个表,一个称为出勤,另一个称为时间片,我试图从当前一周的时间片中减去总的出勤秒数,同时也使用
原则
。 我必须得到行,但我必须从查询中求和和和减去每一行,但我需要学会在一个查询中做到这一点

这是出席人数表的结构:

SELECT * FROM attendance;
+----+---------+---------------------+--------+---------------------+---------------------+
| id | user_id | day                 | status | check_in            | check_out           |
+----+---------+---------------------+--------+---------------------+---------------------+
|  1 |       1 | 2019-12-18 00:00:00 | end    | 2019-12-18 09:52:00 | 2019-12-18 23:37:02 |
|  2 |       1 | 2019-12-19 00:00:00 | end    | 2019-12-19 12:12:00 | 2019-12-19 21:05:00 |
+----+---------+---------------------+--------+---------------------+---------------------+
时间片表:

SELECT * FROM timeslice;
+----+---------------+-------------------------------------+---------------------+---------------------+---------------------+
| id | attendance_id | title                               | day                 | start_at            | stopped_at          |
+----+---------------+-------------------------------------+---------------------+---------------------+---------------------+
| 20 |             1 | Sacar al perro, ducharme y vestirme | 2019-12-18 00:00:00 | 2019-12-18 15:57:50 | 2019-12-18 12:15:36 |
| 21 |             1 | Dormir                              | 2019-12-18 00:00:00 | 2019-12-18 18:44:30 | 2019-12-18 16:16:44 |
| 22 |             1 | Descansar                           | 2019-12-18 00:00:00 | 2019-12-18 23:04:53 | 2019-12-18 20:56:29 |
| 23 |             2 | Comer                               | 2019-12-19 00:00:00 | 2019-12-19 16:03:00 | 2019-12-19 15:37:00 |
| 24 |             2 | Comer                               | 2019-12-19 00:00:00 | 2019-12-19 16:55:00 | 2019-12-19 16:17:00 |
| 25 |             2 | ducharme                            | 2019-12-19 00:00:00 | 2019-12-19 19:58:00 | 2019-12-19 17:20:00 |
+----+---------------+-------------------------------------+---------------------+---------------------+---------------------+
这是我当前的查询,我在其中得到了结果,但随后我必须计算出查询结果,以得到所需的结果和
SQLFiddle


正如我之前所说,我需要的是能够在同一个查询中完成它,而不必使用PHP和
原则
在您的评论之后,我已经更改了我的答案。如果您只需要它提供的值,那么您所需要做的就是使用您的初始查询(使用一些twick)作为
在FROM子句()中创建子查询,然后对其进行计算。在这种情况下,只需将减去SecondsPause的结果与secondsAttendance相加,如下所示:

-- make the calculation you need over the results
SELECT SUM(Results.secondsAttendance - Results.secondsPauses) as ActualValue
FROM ( 
  -- use you initial results as a subquery and name it as Results
  SELECT 
  SUM(TIME_TO_SEC(TIMEDIFF(a.check_out, a.check_in))) AS secondsAttendance, 
  (SELECT SUM(TIME_TO_SEC(TIMEDIFF(t.start_at, t.stopped_at))) 
  FROM timeslice t WHERE t.attendance_id = a.id) AS secondsPauses 
  FROM attendance a 
  -- filter date for the current week 
  where yearweek(DATE(a.check_in), 1) = yearweek(curdate(), 1) 

  GROUP BY a.id
) Results; 
结果是:

+-------------+
| ActualValue |
+-------------+
| 38258       |
+-------------+

你能用格式化的文本(而不是图片)编辑问题以显示最终想要的结果应该是什么样子吗?我还觉得奇怪的是,你无法知道哪个结果属于哪个id。谢谢,但这是不正确的,当你进行左连接时,结果会成倍增加,或者我认为是这样的。Hy@jcarlosweb,我已经用你的fiddler数据测试过了,你确定吗?是的,我确定。应该显示的总秒数是38258,这是您的,如果您将CurrentSecondaAttendance相加,它是不正确的,而且它显示多个结果。这是我的,如果将secondsAttendance的多个结果相加并减去SecondsPause,这是正确的,但正如我在问题中所说,我必须在查询之外进行计算,我需要学习在一个查询中进行计算。是的@jcarlosweb,你是对的。对不起,我的错。我刚刚编辑了我的答案。太棒了!如果你能解释一下你做了什么,尤其是关于()N中的
这是我第一次看到它。
+-------------+
| ActualValue |
+-------------+
| 38258       |
+-------------+