使用 rownum 生成日期范围 table

generating range of dates table with rownum

我正在尝试创建一个客户端级别的报告,该报告将从指定了 client_id 的客户端 table 获取 start_date 和 end_date 等信息。之后的想法是根据客户 start_date 和 end_date.

生成 table 范围内的日期

我的问题:是否可以在查询执行时(动态地)创建具有日期范围的 table?

或者:你能否像使用 for 循环那样生成数字序列而不事先定义临时 table 或辅助程序?

例如(甲骨文SQL):

SELECT  *
FROM    (   SELECT  1   A
            FROM    DUAL    )   A

LEFT JOIN    (  SELECT  10  B
                FROM    DUAL    )   B ON B.B = A.A + ROWNUM

您可以使用 connect by level 语法:

SELECT     TO_DATE('01/02/03', 'DD/MM/RR') + LEVEL - 1 -- Some arbitrary start date
FROM       dual
CONNECT BY LEVEL <= 10 -- Arbitrarily produce 10 rows

您可以将 recursive CTE 用于此目的。

您只需要在 anchor 中传递 start 日期和 stop 日期select 的 递归 CTE

例子

with cal (dt, stop) as (
select date'2022-01-01', date'2022-01-05' from dual
union all
select dt+1, stop from cal
where dt< stop)
select dt from cal;

DT                 
-------------------
01.01.2022 00:00:00
02.01.2022 00:00:00
03.01.2022 00:00:00
04.01.2022 00:00:00
05.01.2022 00:00:00

对我来说看起来像是普通分层查询。

SQL> with cal (dt, stop) as
  2    (select date'2022-01-01', date'2022-01-05' from dual)
  3  select dt + level - 1 datum
  4  from cal
  5  connect by level <= stop - dt + 1;

DATUM
----------
01.01.2022
02.01.2022
03.01.2022
04.01.2022
05.01.2022

SQL>