确定当前记录和下一条记录之间相差的天数
2015-10-21 19:43
417 查看
创建测试用表:
![](http://images2015.cnblogs.com/blog/464801/201510/464801-20151021192425427-1376275580.png)
首先需要把下一条记录的雇佣日期移到当前行,这里需要用到 lead() over() 分析函数:
![](http://images2015.cnblogs.com/blog/464801/201510/464801-20151021193123083-884698714.png)
当数据提取到同一行后,在计算就比较简单了:
![](http://images2015.cnblogs.com/blog/464801/201510/464801-20151021193620380-256085024.png)
和lead对应的就是lag函数,如果能记住两个函数的区别当然比较好,如果记不住,可直接实验。
CREATE OR REPLACE VIEW v AS SELECT '1' AS id, DATE'2015-1-1' AS hiredate FROM DUAL UNION ALL SELECT '2' AS id, DATE'2015-5-1' AS hiredate FROM DUAL UNION ALL SELECT '3' AS id, DATE'2015-3-1' AS hiredate FROM DUAL; SELECT * FROM v;
![](http://images2015.cnblogs.com/blog/464801/201510/464801-20151021192425427-1376275580.png)
首先需要把下一条记录的雇佣日期移到当前行,这里需要用到 lead() over() 分析函数:
SELECT id, hiredate, LEAD(hiredate) OVER(ORDER BY hiredate) next_hd FROM v;
![](http://images2015.cnblogs.com/blog/464801/201510/464801-20151021193123083-884698714.png)
当数据提取到同一行后,在计算就比较简单了:
SELECT id, hiredate, next_hd - hiredate AS diff FROM (SELECT id, hiredate, LEAD(hiredate) OVER(ORDER BY hiredate) next_hd FROM v);
![](http://images2015.cnblogs.com/blog/464801/201510/464801-20151021193620380-256085024.png)
和lead对应的就是lag函数,如果能记住两个函数的区别当然比较好,如果记不住,可直接实验。
SELECT id, hiredate, LEAD(hiredate) OVER(ORDER BY hiredate) lead_hd, hiredate, LAG(hiredate) OVER(ORDER BY hiredate) lag_hd FROM v;
![](http://images2015.cnblogs.com/blog/464801/201510/464801-20151021194213177-1250834293.png)
相关文章推荐
- vim查看函数列表
- Java程序员从笨鸟到菜鸟之(一)开发环境搭建,基本语法,字符串,数组
- 手势识别数据库ChaLearn Gesture Challenge_1:CGD数据库简单介绍
- 学习Mongodb(一)
- Android静态代码检查-Lint
- C语言:编写折半查找函数
- unicode和utf8之间的关系
- Java中的运算符
- 怎样阅读论文
- spring InitializingBean接口
- 简单的矢量数据模型
- OD调试篇10
- ISG2015
- 同一台电脑上安装两个tomcat服务器和环境变量设置
- 游戏开发中,回调机制和事件机制的灵活运用
- coolweather (四)
- 关于eclipse(64位)下aptana插件安装报错问题解决
- 面向对象学习板块
- C#学习日记29----二维索引器 与 foreach遍历索引器
- 前端性能优化最佳实践