在虚拟数据中,您可以看到有两列Task_Completion和Time_stamp.there是一个java调度程序,每当任务完成时都会运行,例如,调度程序在2016年2月15日-2016年5次运行,17-2月17日只运行一次,因此我想要一个从给定列time_stamp中计算start_time和end_time的查询。
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 17-FEB-16 10.44.03.320000000 PM
true 18-FEB-16 10.19.03.333000000 PM
true 18-FEB-16 10.23.03.333000000 PM
ture 18-FEB-16 10.55.03.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
17-FEB-16 10.41.33.320000000 PM 17-FEB-16 10.46.33.320000000 PM
18-FEB-16 10.19.03.333000000 PM 18-FEB-16 10.23.03.333000000 PM
18-FEB-16 10.52.33.333000000 PM 18-FEB-16 10.57.33.333000000 PM 有一些条件:
如果有0-5分钟间隔,例如在2月15日,则start_time将为11.37.56.013000000,end_time将为11.47.48.970000000,但如果没有,则再次检查那天是否有像 15-Feb E 211 12.21.57.587000000(start_time)和12.26.55.767000000(end_time)的日程运行。
,但如果调度运行时间间隔超过5分钟,则查询必须返回硬编码值,例如在17-2月16日,调度程序运行两次10.24.03.320000000 PM和10.44.03.320000000 PM,因此它们的间隔超过5分钟,则必须返回2次输出,因为时间差大于5分钟。在start_time中添加2 30 min,将2 30 min添加到end_time (硬编码)中,即修正为17-2月16日10.21.33.320000000 PM(启动时间),17-2月16日10.33.320000000 PM(end_time) 和17-2月16 10.41.33.320000000 PM(启动时间),17-2月16日10.46.33.320000000 PM(end_time),此条件必须适用于所有日期。
类似地,在18日运行3次,因此它将被计算为2次运行,即10.19.03至10.23.03,以及接下来的10.52.33至10.57.33 (2.30分钟-开始时间和2.30min+end_time)。
发布于 2017-08-03 09:18:37
SELECT MIN( time_stamp ) - CASE COUNT(*)
WHEN 1
THEN INTERVAL '150' SECOND
ELSE INTERVAL '0' SECOND
END AS start_time,
MAX( time_stamp ) + CASE COUNT(*)
WHEN 1
THEN INTERVAL '150' SECOND
ELSE INTERVAL '0' SECOND
END AS end_time
FROM (
SELECT time_stamp,
SUM( diff ) OVER ( ORDER BY time_stamp ) AS grp
FROM (
SELECT time_stamp,
CASE
WHEN time_stamp - LAG( time_stamp ) OVER ( ORDER BY time_stamp )
<= INTERVAL '5' MINUTE
THEN 0
ELSE 1
END AS diff
FROM your_table
)
)
GROUP BY grp;https://stackoverflow.com/questions/45479694
复制相似问题