如上图的表中,怎么将表中第一行的cal_date重新赋值为第二行的cal_date,第二列的cal_date赋值为第三行的cal_date,依次往下移动,请各位大神帮下忙,一直没写出来,谢谢了
解决方案 »
- package里面的procedure和function的信息保存在哪个数据字典表里面
- 如何取某个表中按某个字段分组中的SXH最大的记录?
- 有谁用过LR测试过ORACLE的存储过程没?
- 安装10g后修改机器名,无法正常使用oem
- 求一查询语句,在线等,急!!!!解决立刻结帖!
- 帮我看看这个怎么写
- oracle9i日期转换问题
- 导入大数据量时,如何添加数据文件?
- 急问:ORA-01691:Lob段project.sys_lob000255******006$$无法通过128(在表空间project中)扩展?
- 如何在BOM中根据最底层物料找出最顶层的组件
- Hibernate 报错: org.hibernate.HibernateException: Errors in named queries
- oracle数据库学习
select A.*,lag(cal_date,1,null) over (order by cal_date) from yourTable;--向上偏移一行:
select A.*,lead(cal_date,1,null) over (order by cal_date) from yourTable;另:null 可改成你需要的缺省值
其实就是每一行数据,都用上面一行数据中,这个列的值,我写了一个例子,你可以参考一下:with t(month,cal_date,source_bill)
as
(
select '2015-05','2015-05-21','0001AA10000' FROM DUAL UNION ALL
select '2015-06','2015-07-21','0001AA10000' FROM DUAL UNION ALL
select '2015-07','2015-07-21','0001AA10000' FROM DUAL UNION ALL
select '2015-08','2015-10-21','0001AA10000' )SELECT *,
LAG(CAL_DATE,1,NULL) OVER(ORDER BY MONTH) NEXT_CAL_DATE
FROM T
/*
month cal_date source_bill NEXT_CAL_DATE
2015-05 2015-05-21 0001AA10000 NULL
2015-06 2015-07-21 0001AA10000 2015-05-21
2015-07 2015-07-21 0001AA10000 2015-07-21
2015-08 2015-10-21 0001AA10000 2015-07-21
*/
注意,这里的lag函数的意思是 取前1行(上面1行)的意思,也就是当前行的列值是abc,而上一行的值是yyy,那么对于abc这一行的数据来说,lag(字段名,1)会取到上一行的值yyy