【问题标题】:How to DATEDIFF in MySQL between two consecutive rows not having consecutive IDs?如何在没有连续 ID 的两个连续行之间在 MySQL 中进行 DATEDIFF?
【发布时间】:2018-05-14 16:51:13
【问题描述】:

目前我有一个查询给我这个来自表“日志”的结果:

S.ID    S.INDEX   E.ID  TIME                      Secs
1       1         1     2018-05-14 16:07:48.527   
2       2         1     2018-05-14 16:08:02.967   14
3       3         1     2018-05-14 16:08:21.750   19
10      1         2     2018-05-14 16:07:46.983
11      2         2     2018-05-14 16:08:00.883   14
12      3         2     2018-05-14 16:09:19.830   79
13      4         2     2018-05-14 16:09:49.907   30
29      1         3     2018-05-14 16:08:02.490
30      2         3     2018-05-14 16:08:06.717   04

这里的“Secs”列是手写的,这些是我需要的值。已经尝试使用 DATEDIFF,但由于 S.ID 不是连续的(取决于 E.ID),我没有得到正确的结果。

如何进行查询以返回正确的值?我想我应该考虑 E.ID,因为它是唯一在“相同”增量期间保持不变的东西,如果我在 S.INDEX 中看到 1,我应该重置计数。

【问题讨论】:

  • 你的字段名中真的有.吗?表明在 e.id 值的集合中 s.id 值没有间隙的模式是巧合还是保证?

标签: mysql datediff


【解决方案1】:

只要保证我在原始评论中描述的模式,这应该可以工作:

SELECT a.*, TO_SECONDS(a.TIME) - TO_SECONDS(b.TIME) AS `Secs`
FROM theTable AS s
LEFT JOIN theTable AS b ON a.`e.id` = b.`e.id` AND a.`s.id` = b.`s.id` + 1
;

另外,如果不同的 e.id 值的 s.id 值之间总是存在差距,则实际上不需要 e.id 比较,尽管仍然使查询的意图更加清晰。

【讨论】:

  • 刚刚做了一些小改动以适应我的桌子,工作完美。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2017-06-24
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2019-05-29
相关资源
最近更新 更多