oracle 查询自动补全日期以及相应的数据

具体的请参考:https://www.yuhuashi.info/post/74.html

测试表test:

 在下面查询中的数据时候,会发现日期并不完整,希望日期可以自动补全,并且没有数据的字段自动以上一行的数据补全。

SQL> select * from test;
EVENT_DATE BUILD_NAME
---------- ---------------------------
2016-06-25 B1
2016-10-20 B1
2016-11-27 B1
2017-01-15 B1
2017-02-03 B1
2017-02-07 B1
2017-02-09 B1
2016-07-05 B5
2016-07-17 B5
2016-07-20 B5
2016-08-22 B5
EVENT_DATE BUILD_NAME
---------- -------------------------
2016-10-11 B5
2016-11-03 B5
2016-12-19 B5
2017-03-08 B5
15 rows selected.



 在上面查询中的数据时候,会发现日期并不完整,希望日期可以自动补全,并且没有数据的字段自动以上一行的数据补全,也就是想实现如下的效果
 

 DATES       BUILD_NAME_NEW
---------- ----------------------
2016-06-25 B1
2016-06-26 B1
2016-06-27 B1
2016-06-28 B1
2016-06-29 B1
2016-06-30 B1
2016-07-01 B1
2016-07-02 B1
2016-07-03 B1
2016-07-04 B1
2016-07-05 B5
DATES       BUILD_NAME_NEW
---------- ------------------------
2016-07-06 B5
2016-07-07 B5
2016-07-08 B5
2016-07-09 B5
2016-07-10 B5
2016-07-11 B5
2016-07-12 B5
2016-07-13 B5
2016-07-14 B5
2016-07-15 B5
2016-07-16 B5
......
2017-02-22 B1
2017-02-23 B1
2017-02-24 B1
2017-02-25 B1
2017-02-26 B1
2017-02-27 B1
2017-02-28 B1
2017-03-01 B1
2017-03-02 B1
2017-03-03 B1
2017-03-04 B1
DATES       BUILD_NAME_NEW
---------- -------------------------
2017-03-05 B1
2017-03-06 B1
2017-03-07 B1
2017-03-08 B5
257 rows selected.



下面给出最终的实现语句:

/* Formatted on 2018/4/24 星期二 上午 11:30:07 (QP5 v5.313) */
WITH
    aa
    AS
        (    SELECT bb.startdate + LEVEL - 1 dates
               FROM (SELECT MAX (event_date) enddate, MIN (event_date) startdate
                       FROM test) bb
         CONNECT BY LEVEL <= FLOOR (bb.enddate - bb.startdate) + 1),
    bb
    AS
        (  SELECT DISTINCT a.dates, t.build_name, t.event_date
             FROM aa a LEFT JOIN test t ON t.event_date = a.dates
         ORDER BY a.dates)
SELECT dates,
       build_name,
       event_date,
       NVL (build_name, LAG (build_name IGNORE NULLS) OVER (ORDER BY dates))
           build_name_new
  FROM bb;


  微信截图_20180424113117.png 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨花石~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值