【发布时间】:2017-08-02 06:34:57
【问题描述】:
这里在dummy data中,你可以看到有两列Task_Completion和Time_stamp。有一个java scheduler在任务完成时运行,例如scheduler在 15-FEB-2016 上运行 5 次,并且仅在 17-FEB 上运行所以我想要一个查询来计算给定列 time_stamp
Task_Completion Time_stamp
true 15-FEB-16 11.37.56.013000000 AM
true 15-FEB-16 11.42.55.593000000 AM
true 15-FEB-16 11.47.48.970000000 AM
true 15-FEB-16 12.21.57.587000000 PM
true 15-FEB-16 12.26.55.767000000 PM
true 17-FEB-16 10.24.03.320000000 PM
true 18-FEB-16 10.19.04.333000000 PM
所以输出一定是这样的
start_time end_time
15-FEB-16 11.37.56.013000000 AM 15-FEB-16 11.47.48.970000000 AM
15-FEB-16 12.21.57.587000000 PM 15-FEB-16 12.26.55.767000000 PM
17-FEB-16 10.21.33.320000000 PM 17-FEB-16 10.26.33.320000000 PM
18-FEB-16 10.16.33.333000000 PM 18-FEB-16 10.21.33.333000000 PM
有两个条件
条件 1. 如果在 time_stamp 中有 0-5 分钟 间隔,例如在 2 月 15 日那么 start_time 将是 11.37.56.013000000 并且 end_time 将是 11.47.48.970000000 但如果没有,那么再次检查当天是否有任何时间表运行,例如 2 月 15 日 12.21.57.587000000(start_time) 和 12.26.55.767000000(end_time)
condition2. 如果计划一天只运行一次,则平均该 time_stamp 并从该时间开始添加/减去 2.30 分钟(即) 无需再次检查
举例
2 月 17 日 10.21.33.320000000(start_time) 和 10.26.33.320000000(end_time) 与 2 月 18 日相同
所以我的逻辑是,将条件 1 和条件 2 合并,这就是我最终的结果......
--------------------condition2-------------------
select count(*), min(time_stamp) - interval '150' second start_date, max(time_stamp) + interval '150' second end_date
from serverstatus
group by to_char(time_stamp,'dd-mon-yy')
having count(*)=1
UNION ALL
------------condition1 query--------------------------
我需要 Condition1 查询
【问题讨论】: