Oracle—获取重复n次的行,日期为动态值



我确信在SQL Oracle中有一种简单的方法可以做到这一点,但我找不到。

我有一个表(temp(,有3列(id_1,id_2,date(,其中date是date类型。每一行都是独一无二的。

我想要的输出是用一个新的日期列重复每行15次,其中一行是原始日期,第二行是原始+1天,第三行是原始+2天,等等,对于每个原始行。。。

用原始表定义一个具有15行和简单cross join的辅助CTO

with days as (
select rownum -1 as day_offset 
from dual connect by level <= 15)
select 
a.id1, a.id2, a.date_d + b.day_offset new_date_d
from tab a
cross join days b
order by 1,2,3;

示例-对于示例数据。。。

select * from tab;
ID1        ID2 DATE_D             
---------- ---------- -------------------
1          1 01.01.2020 00:00:00
2          2 01.01.2019 00:00:00

您将得到以下输出

ID1        ID2 NEW_DATE_D         
---------- ---------- -------------------
1          1 01.01.2020 00:00:00
1          1 02.01.2020 00:00:00
1          1 03.01.2020 00:00:00
1          1 04.01.2020 00:00:00
1          1 05.01.2020 00:00:00
....
2          2 13.01.2019 00:00:00
2          2 14.01.2019 00:00:00
2          2 15.01.2019 00:00:00
30 rows selected. 

您也可以使用递归子查询分解

*天偏移量是递归计算的,因为days.day_offset + 1被限制为15,并用于构建新的日期

with days( id1, id2, date_d, day_offset) as (
select id1, id2, date_d, 0 day_offset from tab
union all
select days.id1, days.id2, tab.date_d + days.day_offset + 1 as date_d,
days.day_offset + 1 as day_offset
from tab
join days 
on tab.id1 = days.id1 and tab.id2 = days.id2
and days.day_offset +1 < 15)
select * from days
order by 1,2,3

相关内容

  • 没有找到相关文章

最新更新