Oracle - 获取重复 n 次的行,日期为动态值
Oracle - get row repeated n times, with dynamic value on date
我确定在 SQL Oracle 中有一个简单的方法可以做到这一点,但我找不到它。
我有一个 table ( temp ) ,有 3 列 (id_1, id_2, date ),其中 date 是 Date 类型。每行都是独一无二的。
我想要的输出是每行重复 15 次,在新的日期列中,我在一行中得到原始日期,第二行原始日期 + 1 天,第三行原始日期 + 2 天,等等,对于每个原始行...
定义一个 15 行的辅助 CTO,并使用您原来的 cross join
table
简单地 cross join
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.
或者您可以使用 recursive subquery factoring
*day 偏移量递归计算,因为 days.day_offset + 1
被限制为 15 并用于构建新的 date value
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
我确定在 SQL Oracle 中有一个简单的方法可以做到这一点,但我找不到它。
我有一个 table ( temp ) ,有 3 列 (id_1, id_2, date ),其中 date 是 Date 类型。每行都是独一无二的。
我想要的输出是每行重复 15 次,在新的日期列中,我在一行中得到原始日期,第二行原始日期 + 1 天,第三行原始日期 + 2 天,等等,对于每个原始行...
定义一个 15 行的辅助 CTO,并使用您原来的 cross join
table
cross join
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.
或者您可以使用 recursive subquery factoring
*day 偏移量递归计算,因为 days.day_offset + 1
被限制为 15 并用于构建新的 date value
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