任务组的startTime和endTime之间的差异

时间:2012-09-19 18:33:53

标签: sql date group-by

我有一个有三列的表。

  • 当任务应该开始时(nominalStartTime)
  • 当它开始时(startTime)
  • 结束时(endTime)

大约有一堆任务计划每15分钟运行一次。我需要知道第一个任务开始时和上一个任务结束时的区别。例如,见下文

  NominalStartTime  |  startTime  |   endTime
____________________|_____________|____________
2012-09-19 08:15:00 | 08:15:41.27 | 08:15:47.00
2012-09-19 08:15:00 | 08:15:45.13 | 08:15:45.43
2012-09-19 08:15:00 | 08:15:49.88 | 08:15:50.13
2012-09-19 08:30:00 | 08:30:25.27 | 08:30:26.00
2012-09-19 08:30:00 | 08:30:45.13 | 08:30:45.43
2012-09-19 08:30:00 | 08:30:49.88 | 08:30:50.13

我正在寻找要返回的查询

  NominalStartTime  |  startTime  |   endTime   | difference
____________________|_____________|_____________|____________
2012-09-19 08:15:00 | 08:15:41.27 | 08:15:50.13 | 00:00:08.86
2012-09-19 08:30:00 | 08:30:25.27 | 08:30:50.13 | 00:00:24.86

我尝试了这个但是我通过错误等获得了聚合组

Select NominalStart, MIN(TimeStarted) as TimeStarted, MAX(TimeEnded) as TimeEnded, DATEDIFF(ms, TimeStarted, TimeEnded)
FROM taskRuns
GROUP BY NominalStart
ORDER BY NominalStart

2 个答案:

答案 0 :(得分:2)

试试这个解决方案:

select NominalStart,min(TimeStarted),max(TimeEnded),
       DATEDIFF(ms ,min(TimeStarted),max(TimeEnded)) as difference
from taskRuns
group by NominalStart
order by NominalStart

SQL Fiddle演示

答案 1 :(得分:1)

您是否考虑过使用时间戳?

这将时间值存储为从1970年开始的秒数

操作时间和日期真的很容易,你可以简单地从另一个中减去一个。这真的取决于你使用什么操作数据,php与时间戳非常吻合。

如果我是你,我会把日期存储为时间戳......