sql - 需要帮助获取 Oracle 中多个记录的两个日期范围之间的日期

标签 sql oracle11g hierarchical-data

您好,可以帮我解决这个问题

我有一张这样的 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/

相关文章:

c# - 反序列化从 SQL 查询返回的 XML 对象?

sql - RESTRICT_REFERENCES 和触发器

Oracle 10g PL/SQL Connect By Prior 在同一行返回 Child 和 Parent

sql - 将点连接到一个点

mysql - sql/mysql 从结果中减去一组关键字

php - MySQL,如何按类别排序?

mysql - 在oracle中创建属于同名不同问题的表

sql - 如何检查我的模式中是否存在序列?

c++ - 指向外部类 C++

php - MySQL自连接获取有序父子记录