循环遍历日期范围
Posted
技术标签:
【中文标题】循环遍历日期范围【英文标题】:Loop through date range 【发布时间】:2015-10-05 09:33:54 【问题描述】:如何通过日期循环 Oracle 查询?我必须将变量放在 4 位。我的查询以 WITH AS 开头,所以我不能使用Oracle SQL Loop through Date Range 解决方案。
我也无法创建临时表。
这是我的尝试:
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))
...
【问题讨论】:
检查这个:***.com/questions/987610/… 这里放一些例子.. 在上面的查询中Oracle不识别d.current_d 在提供的示例中,您不需要日期范围。只需检查IORDREFILL.DNCONFIRMEDDELDATE
是否小于该范围内的最高日期,您将在一次扫描中捕获所有行。
您是否在 FROM 子句中提到了d
?
【参考方案1】:
如果我理解正确,您假设每个查询只能使用 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
;
【讨论】:
以上是关于循环遍历日期范围的主要内容,如果未能解决你的问题,请参考以下文章
Windows 批处理文件 - 循环遍历日期范围数组,然后拆分每个项目