[英]How to iterate a select statement over a range of days
我需要在几天内迭代一次select语句。 目的是通过使用记录的打开和关闭时间戳记来获取过去一年中每天的某个时间在各个组中打开的记录的数量。 select语句是这样的:
select I.INC_GROUP, count(I.INC_GROUP) as INC_VOLUME
from XXX.INCIDENT i
where
I.OPEN_TIME < to_date('2015/09/21 08:00:00', 'YYYY/MM/DD HH24:MI:SS') and
I.CLOSE_TIME > to_date('2015/09/21 08:00:00', 'YYYY/MM/DD HH24:MI:SS')
group by I.INC_GROUP
我正尝试将其从今天(今天)上午8点(366)迭代到今天(今天上午8点)。 我的输出将插入到一个表中,并将由INC_GROUP,INC_VOLUME和迭代日期组成(第一条记录为22-SEP-14 08:00:00)。
使用CONNECT BY
生成一组数字,并将其与日期逻辑结合使用(DATE + 1将增加一天)。 这将每天为您生成一行。
SELECT TRUNC(SYSDATE - LEVEL) + (1/24*8)
FROM dual
CONNECT BY LEVEL <= 365
然后可以将其合并到另一个数据集中,例如:
WITH days AS (
SELECT
TRUNC(SYSDATE - LEVEL) + (1/24*8) day_start
-- This adds a day to the above and removes a second
, TRUNC(SYSDATE - LEVEL + 1) + (1/24*8) - (1/24/60/60) day_end
FROM dual
CONNECT BY LEVEL <= 365
)
SELECT
days.day_start
, COUNT(yt.date_col) num
FROM days
LEFT JOIN your_table yt ON yt.date_col BETWEEN days.day_start AND days.day_end
这将为您每天提供一行,并提供来自your_table
的许多匹配行, your_table
行在your_table
上午8点至your_table
之间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.