Sql 如何在一段时间内迭代select语句

Sql 如何在一段时间内迭代select语句,sql,oracle,Sql,Oracle,我需要在一段时间内迭代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 &g

我需要在一段时间内迭代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点1重复它。我的输出将被插入到一个表中,由INC_组、INC_卷组成,迭代第一条记录的日期为2014年9月22日08:00:00。

使用连接方式生成一组数字,并将其与日期逻辑结合使用。日期+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

这将为您每天提供一行,并从您的_表中找到一些匹配的行,这些行位于上午8点到第二天7:59:59之间。

谢谢,我将尝试根据需要调整这些行。记录如下:inc_group,open_time,close_time abc,2015-07-13 09:13:372015-07-14 03:13:37 def,2015-05-13 10:33:232015-05-18 11:13:43所以第二部分的逻辑不起作用。第一部分dt的日期需要是一个变量,插入到我给出的select语句示例中,以代替两个to_date部分。选择INC_GROUP,DT,COUNTINC_GROUP FROM,其中日期为选择TO_date TO_CHARSYSDATE-级别'YYYY/MM/DD'|'08:00:00','YYYY/MM/DD HH24:MI:SS'DT,从双连接按级别天数。DT GROUP BY DT,INC_GROUP