Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL计算时间间隔之间的时间差,包括来自单独表的时间_Mysql_Sql_Database_Date - Fatal编程技术网

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

Mysql SQL计算时间间隔之间的时间差,包括来自单独表的时间,mysql,sql,database,date,Mysql,Sql,Database,Date,我有两个不同的表,叫做观察值和间隔 意见: id | type, | start ------------------------------------ 1 | classroom | 2017-06-07 16:18:40 2 | classroom | 2017-06-01 15:12:00 间隔时间: +----+----------------+--------+------+---------------------+ | id | observation_id

我有两个不同的表,叫做观察值和间隔

意见:

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.我只需要包括task=1的间隔时间。(间隔的结束时间为列出的时间)
2.如果number=1,需要第一个间隔和初始开始之间的时间差(从观察表),我对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
抱歉,如果它看起来很傻,仍在尝试在这里设置代码格式。


希望这能有所帮助

我不明白你是怎么得到这个结果的。用这些数据你是如何得到时间的?16:18:40-16:18:48,16:18:55-16:19:00,总共13秒(对于观察值=1)。15:12:10-15:12:15=总共5秒(对于观察,id=2)。我们只在task=1时计数。因此,当task=1时,我们必须将结束时间与前一个时间间隔进行比较,并将这些秒数添加到总时间中。但
2017年6月7日16:18:55
不是task 1正确,但最后一个数字是当前观察开始的时间。间隔id=3下的时间具有task=1,其中包含其结束时间=16:19:00。然后将其与16:18:55进行比较,16:18:55是当前间隔之前的间隔结束时间。当比较时间时,我们只有结束时间。我们向后看前一个结束时间(我们当前的开始时间)。另外,如果这些看起来像减法符号,我也很抱歉。MySQL没有
LAG()
函数