根据日期差异重复行

时间:2020-08-18 08:42:59

标签: sql oracle recursive-query

需要帮助。我从oracle导入到tableau有一组数据用于计算。但是为了做到这一点,我需要复制下表中所示的图表。例如,如果在开始和结束之间有日期差异,那么我需要复制它并根据有多少日期差异分配代码0,1。目的是我需要在Tableau中使用此函数进行时间间隔计算。谢谢

enter image description here

1 个答案:

答案 0 :(得分:3)

预先生成最大可能值的代码,并将原始表加入代码序列,以便根据特定行上日期之间的差来确定行重复次数:

with t (s,e) as (
  select timestamp '2020-08-16 18:30:00', timestamp '2020-08-16 20:00:00' from dual union all
  select timestamp '2020-08-17 08:00:00', timestamp '2020-08-18 08:00:00' from dual union all
  select timestamp '2020-08-19 08:00:00', timestamp '2020-08-19 00:00:00' from dual union all
  select timestamp '2020-08-20 10:00:00', timestamp '2020-08-22 03:00:00' from dual
), series (code) as (
  select level - 1 from dual connect by level <= (select count(*) from t)
)
select t.*, series.code
from t
join series on trunc(e) - trunc(s) >= series.code
order by s,code;