0

午後 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: レコード数はそれほど大きくないため、パフォーマンスは大きな問題ではありません。

4

1 に答える 1