午後 11 時から午前 8 時頃までに実行された一連のタスクの実行時間の記録を含むデータベース テーブルを見ています。一部のタスクは、午前 12 時より前に開始および終了します。午前12時以降に開始および終了するものもあります。残りは午前 12 時前に開始し、午前 12 時以降に終了します。
毎日、その日の実行に対応するレコードがデータベース テーブルに追加されます。レコードは、特定のタスクの実行が終了した後に作成されます。したがって、1 レコード = 1 つの特定のタスクの 1 回の実行です。
テーブル内のフィールドには、タスク名、開始日時、終了日時などがあります。
ここで、すべてのタスクの最終日の実行に対応するレコードを取得したいと考えています。したがって、特定のタスクがたとえば昨日の夜に実行された場合、一昨日の記録は必要ありません。また、タスクの半分の実行が終了した午前 3 時に起床した場合、現在の実行のみに対応するレコードが必要です。
どうすればいいですか?
私がこれまでに試したこと:
たくさんのこと。私が来た締め切りは、開始日と終了日が現在の日付の 1 日以内にあるかどうかを確認することでした。ただし、昨日実行を終了したタスクも考慮されます。
基本的に、日付の異なるタスクが含まれているため、ロジックを理解できません。
サンプル データは次のとおりです。
ケース 1: 昨日実行されたタスク:
TASK_NAME START_DTTM END_DTTM
TASK1 10/21/2013 11:21 PM 10/21/2013 11:58 PM
TASK2 10/21/2013 11:30 PM 10/22/2013 03:58 AM
TASK3 10/22/2013 12:33 AM 10/22/2013 07:58 AM
すべてのタスクの実行が終了した後、10/22 の朝にクエリを実行します。期待される結果: すべてのタスク。
ケース 2: タスクが昨日実行されなかった (テーブルが END_DTTM DESC でソートされているとします)
TASK_NAME START_DTTM END_DTTM
TASK1 10/21/2013 11:21 PM 10/21/2013 11:58 PM
TASK2 10/21/2013 11:30 PM 10/22/2013 03:58 AM
TASK3 10/22/2013 12:33 AM 10/22/2013 07:58 AM
クエリは 10/23 の朝に実行されています。期待される結果: すべてのタスク (10/22 の夜と 10/23 の早朝にタスクが実行されなかったため)
ケース 3: タスクが実行中 (テーブルが END_DTTM DESC でソートされているとします):
TASK_NAME START_DTTM END_DTTM
TASK1 10/21/2013 11:21 PM 10/21/2013 11:58 PM
TASK2 10/21/2013 11:30 PM 10/22/2013 03:58 AM
TASK3 10/22/2013 12:33 AM 10/22/2013 07:58 AM
クエリは 10 月 22 日午前 3 時に実行されます。期待される結果:
10/22 4:00AM に実行される TASK1 クエリ。期待される結果: TASK1、TASK2
PS: レコード数はそれほど大きくないため、パフォーマンスは大きな問題ではありません。