Oracle 循环浏览日期范围

Oracle 循环浏览日期范围,oracle,Oracle,如何通过日期循环Oracle查询?我必须把变量放在4位。我的查询以AS开头,因此无法使用解决方案 我也无法创建临时表 以下是我的尝试: WITH d AS ( SELECT DATE'2015-06-22' + LEVEL - 1 AS current_d FROM dual CONNECT BY DATE'2015-06-22' + LEVEL - 1 < DATE'2015-10-04' ), OrderReserve AS ( SELEC

如何通过日期循环Oracle查询?我必须把变量放在4位。我的查询以AS开头,因此无法使用解决方案

我也无法创建临时表

以下是我的尝试:

   WITH d 
AS (
    SELECT DATE'2015-06-22' + LEVEL - 1 AS current_d
       FROM dual
    CONNECT BY DATE'2015-06-22' + LEVEL - 1 < DATE'2015-10-04'
),
OrderReserve
AS (
    SELECT cvwarehouseid
        ,lproductid
        ,SUM(lqty) lqty
    FROM ABBICS.iOrdPrdQtyDate
    GROUP BY cvwarehouseid
        ,lproductid
    )
    SELECT 
    ...
    WHERE IORDREFILL.DNCONFIRMEDDELDATE < CAST(TO_CHAR(d.current_d , 'YYYYMMDD') AS NUMBER(38))
    ...

如果我理解正确,则假定每个查询只能使用1个内联表。但事实并非如此,您可以使用多个内联表并使用另一个扩展现有WITH子句来循环日期:

with OrderReserve as (
  SELECT cvwarehouseid
      ,lproductid
      ,SUM(lqty) lqty
  FROM ABBICS.iOrdPrdQtyDate
  GROUP BY cvwarehouseid
      ,lproductid    
), date_range as (
  select sysdate+level
  from dual
  connect by level <= 30
)
select *
from OrderReserve, date_range
... -- expand with date_range as you see fit
;

检查:在这里放一些例子。在上面的查询中,Oracle不识别d.current\n在提供的例子中,您不需要日期范围。只需检查IORDREFILL.DNCONFIRMEDDELDATE是否小于范围内的最高日期,就可以在一次扫描中捕获所有行。是否在FROM子句中提到d?