2017-06-12 231 views
0

我有两个不同的表,称为观测值和间隔。SQL计算间隔之间的时间间隔(包括来自单独表格的时间)

意见:

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 

因此,我必须首先检查第一个观察值是否具有任务= 1,如果是,我必须记录当前区间和观察表中的起点之间的差异,然后将其添加到总时间。从那里开始,如果任务= 1,我只需添加当前时间间隔和上一个时间间隔的时间差。

我知道我可以使用:

select observation_id, TIME_TO_SEC(TIMEDIFF(max(time),min(time))) 
from your_table 
group by observation_id 

找到所有间隔之间的间隔表的总时间的第一个之外。 但是 1.我只需要包括任务= 1的间隔时间。(间隔的结束时间是列出的时间间隔) 2.如果number = 1,需要第一个间隔和初始开始之间的时间延迟(从观察表)

+1

我不明白你怎么achive这一结果。你如何获得这些数据的{13,5}秒? –

+0

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的情况下,我们必须将结束时间与前一时间间隔进行比较,并将这些秒数添加到总计中。 –

+0

但是'07/06/2017 16:18:55'不是任务1 –

回答

0

我还是新来的社区#1,但你可以尝试使用SQL

LAG() function 

例如 使用一个外部SELECT语句

SELECT COl1, COL2, (DATEDIFF(mi, Inner.prevtime, Currentdatetime,0)) AS Difference 
FROM (SELECT LAG(Created_Datetime) OVER (ORDER BY Created_Datetime) AS prevtime 
     From MyTable 
     Where SomeCondition) as Inner 

对不起,如果它看起来愚蠢,仍然试图学习在这里格式化代码。 https://explainextended.com/2009/03/12/analytic-functions-optimizing-lag-lead-first_value-last_value/

希望它可以帮助

+1

MySQL不具备'LAG()'功能 –