1

3 つの列を持つテーブルがあります。

  • タスクの開始予定時刻 (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 に答える