SQL计算间隔之间的timediff,包括来自单独表的时间

时间:2017-06-12 18:00:48

标签: mysql sql database date

我有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

,则需要第一个间隔和初始开始之间的时间轴(来自观察表)

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/

希望有所帮助