2017-06-12 230 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()'功能 –