依据前后数据关联关系,生成多行数据

例:一张表的数据如下,第一个字段是日期,第二个字段是数字 
ROW DATE NUMBER
1 2014-02-01 4
2 2014-02-08 3
3 2014-02-15 4
4 2014-02-22 9
现在需要写一个查询,显示出的结果是7号以前的的值是4,8号到14号的值是3,15号到21号的值是4,21号到当前日期的值是9。
方法1:
分析:要生成的数据,日期非常有规律,以一个星期为界限,可以构造一个序列,0-6,然后已有日期+序列,作为新生成的日期
完整sql代码如下:
SQL> edit
已写入 file afiedt.buf
  1 with t1 as(
  2 select date'2014-02-01' dt,4 num from dual union all
  3 select date'2014-02-08',3 from dual union all
  4 select date'2014-02-15',4 from dual union all
  5 select date'2014-02-22',9 from dual),
  6 t2 as(select level-1 l from dual connect by
  7 level<=7)
  8* select t1.dt+l,num from t1,t2 order by 1
  9 /
T1.DT+L NUM
-------------- ----------
01-2月 -14 4
02-2月 -14 4
03-2月 -14 4
04-2月 -14 4
05-2月 -14 4
06-2月 -14 4
07-2月 -14 4
08-2月 -14 3
09-2月 -14 3
10-2月 -14 3
11-2月 -14 3
T1.DT+L NUM
-------------- ----------
12-2月 -14 3
13-2月 -14 3
14-2月 -14 3
15-2月 -14 4
16-2月 -14 4
17-2月 -14 4
18-2月 -14 4
19-2月 -14 4
20-2月 -14 4
21-2月 -14 4
22-2月 -14 9
T1.DT+L NUM
-------------- ----------
23-2月 -14 9
24-2月 -14 9
25-2月 -14 9
26-2月 -14 9
27-2月 -14 9
28-2月 -14 9
已选择28行。
方法2:
先构造一个日期表,然后与此表left join,再利用last_value( ignore nulls)生成num字段数据 ,完整代码如下:
SQL> edit
已写入 file afiedt.buf
  1 with t1 as
  2 (select date '2014-02-01' dt, 4 num
  3 from dual
  4 union all
  5 select date '2014-02-08', 3
  6 from dual
  7 union all
  8 select date '2014-02-15', 4
  9 from dual
 10 union all
 11 select date '2014-02-22', 9 from dual),
 12 t2 as
 13 (select date '2014-02-01' + level - 1 dt
 14 from dual
 15 connect by level <=
 16 TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE('201402', 'YYYYMM')), 'dd')))
 17 select t2.dt, last_value(num ignore nulls) over(order by t2.dt) num
 18 from t2
 19 left join t1
 20* on (t1.dt = t2.dt)
SQL> /
DT NUM
-------------- ----------
01-2月 -14 4
02-2月 -14 4
03-2月 -14 4
04-2月 -14 4
05-2月 -14 4
06-2月 -14 4
07-2月 -14 4
08-2月 -14 3
09-2月 -14 3
10-2月 -14 3
11-2月 -14 3
DT NUM
-------------- ----------
12-2月 -14 3
13-2月 -14 3
14-2月 -14 3
15-2月 -14 4
16-2月 -14 4
17-2月 -14 4
18-2月 -14 4
19-2月 -14 4
20-2月 -14 4
21-2月 -14 4
22-2月 -14 9
DT NUM
-------------- ----------
23-2月 -14 9
24-2月 -14 9
25-2月 -14 9
26-2月 -14 9
27-2月 -14 9
28-2月 -14 9
已选择28行。
SQL> 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21251711/viewspace-1102669/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21251711/viewspace-1102669/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值