您好,可以帮我解决这个问题
我有一张这样的 table
From_date to_date price Product 13-Apr-2012 15-Apr-2012 15 hammer 1-may-2012 7-May-2012 15 Scredriver
From this table , I should derive a new field calc_date - which should contain the dates between from_date and to_date for every row with price and product data being replicated
Result Set :
From_date to_date calc_date price Product
13-Apr-2012 15-Apr-2012 13-Apr-2012 15 hammer
13-Apr-2012 15-Apr-2012 14-Apr-2012 15 hammer
13-Apr-2012 15-Apr-2012 15-Apr-2012 15 hammer
1-may-2012 5-May-2012 1-may-2012 15 Scredriver
1-may-2012 5-May-2012 2-may-2012 15 Scredriver
1-may-2012 5-May-2012 3-may-2012 15 Scredriver
1-may-2012 5-May-2012 4-may-2012 15 Scredriver
1-may-2012 5-May-2012 5-may-2012 15 Scredriver
我尝试过的 Sql 无法获取我所需的数据(结果集)
SELECT from_date,
TO_DATE,
from_date + (LEVEL - 1) AS calc_date,
price,
product
FROM (SELECT from_date,
TO_DATE,
price,
product
FROM details)
CONNECT BY LEVEL <= TO_DATE - (from_date - 1)
您能帮我进行查询吗?它给出了上面提到的所需结果集
最佳答案
我倾向于构建一个足够大的数字表,然后使用它:
with numbers as (
select level - 1 as n
from dual
connect by level <= 500
)
select from_date, to_date, from_date + n.n as calc_date, price, product
from details d join
numbers n
on n.n <= to_date - from_date;
您也可以对每条记录执行此操作。我只是发现这更容易理解。
如果您担心范围,您可以这样做:
with numbers as (
select level - 1 as n
from dual
connect by level <= (select max(to_date - from_date) + 1 from details)
)
select from_date, to_date, from_date + n.n as calc_date, price, product
from details d join
numbers n
on n.n <= to_date - from_date;
关于sql - 需要帮助获取 Oracle 中多个记录的两个日期范围之间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22687694/