oracle中lead和lag函数 (转载)
- 解决上一户和下一户问题
这两个函数,是偏移量函数,其用途是:可以查出同一字段下一个值或上一个值。
- lead(col_name,num,flag)
- col_name是列名;num是取向下第几个值;flag是一个标志,也就是如果向下第几个值是空值的话就取flag;
- 例如lead(login_time,1,null)这个是向下取一个值,如果这个值为空则按空算,当然也可以用其他值替换。
- lag(col_name,num,flag)
- 和lead类似,col_name是列名;num是取向上第几个值;flag是一个标志,也就是如果向上第几个值是空值的话就取flag;
- 例如lag(login_time,1,null)这个是向上取一个值,如果这个值为空则按空算,当然也可以用其他值替换。
- 举个例子:有一个表tmp_test(u_id,login_time)查一下这个表中连续7天都有登录机器的人是谁?
- 造下数据:
- create table tmp_test(u_id number,login_time date);
- insert into tmp_test
- select 1 rn,sysdate + rownum as login_time
- from dual
- connect by level <=8
- union
- select 2 rn,sysdate + rownum as login_time
- from dual
- connect by level <=3
- union
- select 3 rn,sysdate + rownum as login_time
- from dual
- connect by level <=2
- union
- select 2 rn,sysdate + rownum+4 as login_time
- from dual
- connect by level <=5;
- commit;
- 然后造几条重复数据:
- insert into tmp_test
- select 1 rn,sysdate + rownum as login_time
- from dual
- connect by level <=3;
- 查下数据:
- select * from tmp_test;
- U_ID LOGIN_TIME
- ---------- -----------
- 1 2012/3/8 6:33:24
- 1 2012/3/9 6:33:24
- 1 2012/3/10 6:33:24
- 1 2012/3/11 6:33:24
- 1 2012/3/12 6:33:24
- 1 2012/3/13 6:33:24
- 1 2012/3/14 6:33:24
- 1 2012/3/15 6:33:24
- 2 2012/3/8 6:33:24
- 2 2012/3/9 6:33:24
- 2 2012/3/10 6:33:24
- 2 2012/3/12 6:33:24
- 2 2012/3/13 6:33:24
- 2 2012/3/14 6:33:24
- 2 2012/3/15 6:33:24
- 2 2012/3/16 6:33:24
- 3 2012/3/8 6:33:24
- 3 2012/3/9 6:33:24
- 1 2012/3/8 6:37:35
- 1 2012/3/9 6:37:35
- 1 2012/3/10 6:37:35
- 从上面数据看出其实只有u_id=1满足条件,那么怎么用sql实现呢?
- SQL> select distinct u_id
- 2 from (select u_id,
- 3 login_time last_login_time,
- 4 lead(login_time, 6) over(partition by u_id order by u_id, login_time) next_login_time
- 5 from (select distinct u_id, trunc(login_time) login_time
- 6 from tmp_test))
- 7 where next_login_time - last_login_time = 6;
- U_ID
- ----------
- 1
- ok,就是这个结果。其实用lag也可以实现相同结果,写法如下:
- select distinct u_id
- from (select u_id,
- login_time last_login_time,
- lag(login_time, 6) over(partition by u_id order by u_id, login_time) next_login_time
- from (select distinct u_id, trunc(login_time) login_time
- from tmp_test))
- where last_login_time - next_login_time = 6;
oracle中lead和lag函数 (转载)的更多相关文章
- Oracle中的内置函数在sql中的转换整理
程序里面经常会即支持Oracle数据库,又支持sql数据库.而有些Oracle内置函数用的比较多,但在sql中语法有些不同,我做了些整理,希望可以帮助大家.... 1.oracle中的内置函数:ora ...
- 用sql语句导出oracle中的存储过程和函数
用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' repl ...
- Oracle中生成随机数的函数(转载)
在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产 ...
- oracle中110个常用函数介绍
1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dua ...
- Oracle中如何使用REGEXP_SUBSTR函数
REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcst ...
- Oracle中如何使用REGEXP_SUBSTR函数动态截取字符串
REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr ...
- oracle中next_day()、last_day()函数解析
oracle中next_day()函数解析 Sql代码 当前系统时间的下一星期一的时间select next_day(sysdate,1) from dual NEXT_DAY(date,char ...
- oracle 列相减——(Oracle分析函数Lead(),Lag())
lag和lead函数,用于取出数据的前n行的数据和后n行的数据,当然要和over(order by)一起组合 其实这2个函数的作用非常好理解,Lead()就是取当前顺序的下一条记录,相对Lag()就是 ...
- Oracle中生成随机数的函数
在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产 ...
随机推荐
- 2016-2017-1 《信息安全系统设计基础》 学生博客及Git@OSC 链接
2016-2017-1 <信息安全系统设计基础> 学生博客及Git@OSC 链接 博客 1452 20145201李子璇 20145202马 超 20145203盖泽双 20145204张 ...
- JS组件系列——Bootstrap寒冬暖身篇:弹出框和提示框效果以及代码展示
前言:对于Web开发人员,弹出框和提示框的使用肯定不会陌生,比如常见的表格新增和编辑功能,一般常见的主要有两种处理方式:行内编辑和弹出框编辑.在增加用户体验方面,弹出框和提示框起着重要的作用,如果你的 ...
- kuangbin专题总结一 简单搜索
A - 棋盘问题:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有 ...
- 【JavaScript】javascript 方法 test()
个人理解:var b = x.test(y); y是否存在模式x中,返回true或false:x可以是正则,字符串,
- 【Python】[进程和线程]多进程,多线程,ThreadLocal,进程VS.线程,分布式进程
1.多进程,multiprocessing模块, 进程间的通信:Queue[队列],Pipes[管子]2.多线程, 注意:线程公用变量,混乱 解决方法Lock:因为只有一个锁,所以当要执 ...
- python基础-RE正则表达式
re 正则表示式 正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写 ...
- UIDynamic - 推动行为: UIPushBehavior
用途: 从一个点移动到另外一个点; 相关属性: mode : UIPushBehaviorModeContinuous //推移模式 angle : setAngle //推移角度 magnitu ...
- get last dirname/filename in a file path argument
$ dirname /home/train/00.incipient_data/data_for_gene_prediction_and_RNA-seq/240_rep2.fastq /home/tr ...
- iOS特殊字符处理
你提供的 URL 字符串 里面可能包含某些字符,比如‘$‘ ‘&’ ‘?’...等,这些字符在 URL 语法中是具有特殊语法含义的, 比如 URL :http://www.baidu.com/ ...
- margin双边距的问题
margin:20px;height:20px;float:left margin:20px;height:20px;float:left