我有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,如果是,我必须记录当前间隔和观察表中的开始之间的差异,然后将其添加到总时间。从那里开始,如果任务= 1,我只是添加当前间隔和前一个间隔的时差。
我知道我可以使用:
select observation_id, TIME_TO_SEC(TIMEDIFF(max(time),min(time)))
from your_table
group by observation_id
在第一个区域之外的所有区间之间找到区间表中的总时间。 但 1.我只需要包含任务= 1的间隔时间。(间隔的结束时间是列出的时间间隔) 2.如果number = 1
,则需要第一个间隔和初始开始之间的时间轴(来自观察表)答案 0 :(得分:0)
我仍然是Stackoverflow社区的新手,但您可以尝试使用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/
希望有所帮助