【发布时间】:2017-11-14 07:29:45
【问题描述】:
我有 2 个不同的表,称为观察和间隔。
观察:
id | type, | start
------------------------------------
1 | classroom | 2017-06-07 16:18:40
2 | classroom | 2017-06-01 15:12:00
间隔:
+----+----------------+--------+------+---------------------+
| id | observation_id | number | task | time |
+----+----------------+--------+------+---------------------+
| 1 | 1 | 1 | 1 | 07/06/2017 16:18:48 |
| 2 | 1 | 2 | 0 | 07/06/2017 16:18:55 |
| 3 | 1 | 3 | 1 | 07/06/2017 16:19:00 |
| 4 | 2 | 1 | 3 | 01/06/2017 15:12:10 |
| 5 | 2 | 2 | 1 | 01/06/2017 15:12:15 |
+----+----------------+--------+------+---------------------+
我想要一个可以显示的视图:
observation_id | time_on_task (total time in seconds where task = 1)
1 | 13
2 | 5
所以我必须首先检查第一个观察是否有task = 1,如果是我必须从观察表中记录当前间隔与开始之间的差异,然后将其添加到总时间中。从那以后如果task = 1,我只是添加当前间隔和前一个间隔的时间差。
我知道我可以使用:
select observation_id, TIME_TO_SEC(TIMEDIFF(max(time),min(time)))
from your_table
group by observation_id
在间隔表中查找第一个间隔之外的所有间隔之间的总时间。 但 1.我只需要包括任务= 1的间隔时间。(间隔的结束时间是列出的那个) 2. 如果 number = 1,则需要第一个间隔和初始开始(来自观察表)之间的 timediff
【问题讨论】:
-
我不明白你是如何获得这个结果的。您如何使用该数据获得
{ 13, 5 }秒? -
16:18:40 - 16:18:48, 16:18:55 - 16:19:00, = 总共 13 秒(observation_id =1)。 15:12:10 - 15:12:15 = 总共 5 秒(对于 observation_id =2)。只计算任务 = 1 的位置。因此,任务 = 1 时,我们必须将结束时间与前一个间隔进行比较,并将这些秒数加到总数中。
-
但是
07/06/2017 16:18:55不是任务 1 -
正确,但最后一个数字是当前观察开始的地方。间隔 id = 3 下的时间有 task = 1,其中包含它的结束时间 = 16:19:00。然后应将其与当前间隔之前的间隔结束时间 16:18:55 进行比较。比较时间时,我们只有结束时间。我们向后看之前的结束时间(我们当前的开始时间)。另外,对不起,如果这些看起来像减法符号。它们旨在代表通(例如 16:18:55 通 16:19:00)。