select time,
(lead (date)over(order by date)-date)*24*60 time
from t1;
具体思路是先通过lead函数把上下两行时间日期字段的时间差求出来在做其他运算,
现在的问题是怎么把计算得到的结果“time”插入到t1表中?
使用alter命令add失败,事先添加字段time再用update set time=也不行,希望高手能给小弟指点一下
(lead (date)over(order by date)-date)*24*60 time
from t1;
具体思路是先通过lead函数把上下两行时间日期字段的时间差求出来在做其他运算,
现在的问题是怎么把计算得到的结果“time”插入到t1表中?
使用alter命令add失败,事先添加字段time再用update set time=也不行,希望高手能给小弟指点一下
解决方案 »
- 如何跨不同DB取得table 结构的脚本
- 如何查看ORACLE 数据库的操作日志
- 我的表空间满了,每次设置无限制单都不成功,怎么设置????(内有贴图)
- 老问题,oracle中处理blob字段,新关注!
- 花了一个上午的时间,终于解决了PROC 在VC下的编译问题,有兴趣的可以看一下
- 如何在插表的时候生成随机数。
- 各位大虾,请问怎么给ORACLE传递数组呢???
- 请高手指点迷津--transparent gateway for sybase 等待......
- ****请教如何将存储过程返回的记录集写入文本文件****
- ORALCE9I的服务器端最少要安装那些组件,请给我个建议!
- 需要oracle帮助文档
- Oracle中如何定时执行一条SQL语句?
Table createdSQL> insert into t1(t_date) select sysdate +level from dual connect by level <=10;
10 rows insertedSQL> select * from t1;
T_DATE TIMEDIFF
----------- ----------
2015-06-06
2015-06-07
2015-06-08
2015-06-09
2015-06-10
2015-06-11
2015-06-12
2015-06-13
2015-06-14
2015-06-15
10 rows selectedSQL> update t1 b set b.timediff =
2 (select timediff from (select lead(t_date)over(order by t_date) - t_date as timediff from t1) a
3 where a.rowid=b.rowid);
10 rows updatedSQL> select * from t1;
T_DATE TIMEDIFF
----------- ----------
2015-06-06 1
2015-06-07 1
2015-06-08 1
2015-06-09 1
2015-06-10 1
2015-06-11 1
2015-06-12 1
2015-06-13 1
2015-06-14 1
2015-06-15
10 rows selected
如果数据量大的话,建议create table select ... + Rename
SQL> create table t2 as select t1.t_date, lead(t_date)over(order by t_date) - t_date as timediff from t1;
Table createdSQL> drop table t1;
Table droppedSQL> alter table t2 rename to t1;
Table alteredSQL> select * from t1;
T_DATE TIMEDIFF
----------- ----------
2015-06-06 1
2015-06-07 1
2015-06-08 1
2015-06-09 1
2015-06-10 1
2015-06-11 1
2015-06-12 1
2015-06-13 1
2015-06-14 1
2015-06-15
10 rows selected