【问题标题】:SQL calculate timediff between intervals including a time from a separate tableSQL计算间隔之间的timediff,包括来自单独表的时间
【发布时间】:2017-11-14 07:29:45
【问题描述】:

我有 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,如果是我必须从观察表中记录当前间隔与开始之间的差异,然后将其添加到总时间中。从那以后如果task = 1,我只是添加当前间隔和前一个间隔的时间差。

我知道我可以使用:

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

在间隔表中查找第一个间隔之外的所有间隔之间的总时间。 但 1.我只需要包括任务= 1的间隔时间。(间隔的结束时间是列出的那个) 2. 如果 number = 1,则需要第一个间隔和初始开始(来自观察表)之间的 timediff

【问题讨论】:

  • 我不明白你是如何获得这个结果的。您如何使用该数据获得{ 13, 5 } 秒?
  • 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 时,我们必须将结束时间与前一个间隔进行比较,并将这些秒数加到总数中。
  • 但是 07/06/2017 16:18:55 不是任务 1
  • 正确,但最后一个数字是当前观察开始的地方。间隔 id = 3 下的时间有 task = 1,其中包含它的结束时间 = 16:19:00。然后应将其与当前间隔之前的间隔结束时间 16:18:55 进行比较。比较时间时,我们只有结束时间。我们向后看之前的结束时间(我们当前的开始时间)。另外,对不起,如果这些看起来像减法符号。它们旨在代表通(例如 16:18:55 通 16:19:00)。

标签: mysql sql database date


【解决方案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

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

希望对你有帮助

【讨论】:

  • MySQL 没有LAG() 函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 2022-01-12
相关资源
最近更新 更多