1

我有一个包含三列的表。

  • 任务应该开始的时间 (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
4

2 回答 2

2

试试这个解决方案:

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

SQL 小提琴演示

于 2012-09-19T18:50:24.867 回答
1

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

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

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

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

于 2012-09-19T18:46:54.960 回答