我正在查看一个数据库表,其中包含在大约晚上 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:00 运行。预期结果:TASK1
查询在 10 月 22 日凌晨 4:00 运行。预期结果:TASK1、TASK2
PS:性能不是一个大问题,因为记录的数量不是那么大。