LAG()和LEAD()统计函数能够在一次查询中取出同一字段的前N行的数据和后N行的值。这样的操作能够使用对同样表的表连接来实现,只是使用LAG和 LEAD有更高的效率。下面整理的LAG()和LEAD()样例:

LAG(EXPRESSION,<OFFSET>,<DEFAULT>)

SQL> select year,region,profit ,lag (profit,1) over (order by year)  as 51xit_exp from test;

YEAR REGION      PROFIT 51xit_exp

---- ------- ---------- -------------

2003 West            88

2003 West            88            88

2003 Central        101            88

2003 Central        100           101

2003 East           102           100

2004 West            77           102

2004 East           103            77

2004 West            89           103

LEAD(EXPRESION,<OFFSET>,<DEFAULT>)

SQL> select year,region,profit ,lead (profit,1) over (order by year)  as next_year_exp from test;

YEAR REGION      PROFIT NEXT_YEAR_EXP

---- ------- ---------- -------------

2003 West            88            88

2003 West            88           101

2003 Central        101           100

2003 Central        100           102

2003 East           102            77

2004 West            77           103

2004 East           103            89

2004 West            89

Lag函数为Lag(exp,N,defval),defval是当该函数无值可用的情况下返回的值。Lead函数的使用方法类似。

Lead和Lag函数也能够使用分组,下面是使用region分组的样例:

SQL> select year,region,profit , lag (profit,1,0) over (PARTITION BY region order by year)    as 51xit_exp from test;

YEAR REGION      PROFIT 51xit_exp

---- ------- ---------- -------------

2003 Central        101             0

2003 Central        100           101

2003 East           102             0

2004 East           103           102

2003 West            88             0

2003 West            88            88

2004 West            77            88

2004 West            89            77

一SQL问题解答:

问题:

CREATE   TABLE  ldy_temp_2

(

  分局    VARCHAR(255),

派出所    VARCHAR(255) ,

证件类型    VARCHAR(255) ,

证件号码    VARCHAR(255) ,

姓名    VARCHAR(255) ,

性别    VARCHAR(255) ,

行政区划    VARCHAR(255) ,

旅馆名称    VARCHAR(255) ,

旅馆地址    VARCHAR(255) ,

房间号    VARCHAR(255) ,

入住时间    VARCHAR(255) ,

col012    VARCHAR(255)

);

INSERT INTO LDY_TEMP_2

(证件号码,姓名,旅馆名称,入住时间)

VALUES('1234','ZHANGTAO','A','20100506');

INSERT INTO LDY_TEMP_2

(证件号码,姓名,旅馆名称,入住时间)

VALUES('1234','ZHANGTAO','A','20100507');

INSERT INTO LDY_TEMP_2

(证件号码,姓名,旅馆名称,入住时间)

VALUES('1234','ZHANGTAO','B','20100508');

INSERT INTO LDY_TEMP_2

(证件号码,姓名,旅馆名称,入住时间)

VALUES('1234','ZHANGTAO','A','20100509');

INSERT INTO LDY_TEMP_2

(证件号码,姓名,旅馆名称,入住时间)

VALUES('1235','ZZZZ','A','20100506');

INSERT INTO LDY_TEMP_2

(证件号码,姓名,旅馆名称,入住时间)

VALUES('1235','ZZZZ','B','20100507');

INSERT INTO LDY_TEMP_2

(证件号码,姓名,旅馆名称,入住时间)

VALUES('1235','ZZZZ','A','20100508');

INSERT INTO LDY_TEMP_2

(证件号码,姓名,旅馆名称,入住时间)

VALUES('1235','ZZZZ','B','20100509');

建表语句和測试数据已经给出  请问  怎样查找相邻两次入住旅馆名称不同的人;也就是说 一个人的证件号码是123的话 那么这个人的信息依照入住时间排序后  相邻两条数据的旅馆名称不能一样 。

解答:

with temp_a as

(select

        t.证件号码,

        t.旅馆名称,

        t.入住时间,

        lag(t.旅馆名称) over (partition by t.证件号码 order by t.入住时间) as lagname

from ldy_temp_2 t)

select 证件号码,姓名,旅馆名称,入住时间

from ldy_temp_2 a

where a.证件号码 not in (select b.证件号码 from temp_a b where  b.旅馆名称=b.lagname)

oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)的更多相关文章

  1. oracle中LAG()和LEAD()以及over (PARTITION BY)

    LAG()和LEAD()统计函数可以在一次查询中取出同一字段的前N行的数据和后N行的值.这种操作可以使用对相同表的表连接来实现,不过使用LAG和 LEAD有更高的效率.以下整理的LAG()和LEAD( ...

  2. 转-oracle中比较两表表结构差异和数据差异的方法

    oracle中比较两表表结构差异和数据差异的方法 原作者:li2008xue2008ling  出处:http://blog.csdn.net       在工作中需要完成这么一个需求:比较两个表的表 ...

  3. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  4. Oracle下lag和lead分析函数

    [转自] http://blog.csdn.net/thinkscape/article/details/8290894 Lead和Lag分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag) ...

  5. oracle中比较两表表结构差异和数据差异的方法

    在工作中需要完成这么一个需求:比较两个表的表结构是否形相同,并找出差异.比较两个表中的数据是否相同,并找出差异数据?    分析:由于表结构中字段比较多,手工比较很浪费时间,而且不能保证不出错误.对于 ...

  6. C#以及Oracle中的上取整、下取整方法

    1.C#中: 上取整——Math.Ceiling(Double),即返回大于或等于指定双精度浮点数的最大整数(也可称为取天板值): eg:  Math.Ceiling(1.01)=2;      Ma ...

  7. 恢复oracle中误删除drop掉的表 闪回的方法

    恢复oracle中误删除drop掉的表   查看回收站中表 --需要在其所在用户下查询 回收站对象 select object_name,original_name,partition_name,ty ...

  8. oracle中查找和删除重复记录的几种方法总结

    平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...

  9. oracle函数 lag()和lead()

    [语法] lag(EXPR,<OFFSET>,<DEFAULT>) LEAD(EXPR,<OFFSET>,<DEFAULT>) [功能]表示根据COL1 ...

随机推荐

  1. iOS 使用xmpp做聊天客户端

    可以号称史上最详细的xmpp做iOS客户端聊天介绍. 简介:XMPP协议是一种基于Socket长连接.以XML格式进行基本信息交换.C/S  S/S多种架构的聊天协议 XMPPServer 基于XMP ...

  2. Objective-C学习篇05—Foundation框架简介

    iOS中所谓的框架,说到底就是一个目录,iOS提供了很多我们可以在应用程序中调用的框架.许多应用程序都使用了如Foundation.UIKit和Core Graphics这些框架.根据你为应用程序选择 ...

  3. NSUserDefaults 很详细的介绍使用(转发)

    http://my.oschina.net/u/1245365/blog/294449

  4. unexpected nil window in _UIApplicationHandleEventFromQueueEvent...

    unexpected nil window in _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: <UI ...

  5. 《C# 并发编程 · 经典实例》读书笔记

    前言 最近在看<C# 并发编程 · 经典实例>这本书,这不是一本理论书,反而这是一本主要讲述怎么样更好的使用好目前 C#.NET 为我们提供的这些 API 的一本书,书中绝大部分是一些实例 ...

  6. 关闭C#主窗体弹出是否关闭对话框

    在开发系统时,常常有这样一个问题,就是当关闭主窗体,也即退出系统时,如果想提示是否关闭,以免误操作,可以在主窗体的Main_FormClosing事件中添加一个对话框,代码如下: private vo ...

  7. TCP/IP-入门

    Life is not a rehearsal "人生没有彩排" 参考资料:TCP/IP入门经典 (第五版) TCP/IP详解 卷一:协议 一.什么是TCP/IP TCP/IP是一 ...

  8. js获取本月、三个月、今年的日期插件dateHelp

    最近看了一些关于面向对象的知识,最近工作中在做统计查询的时候需要用到本月.近三个月.今年的日期范围,所以下面用用面向对象的思想写了一个获取日期的插件,大家可以借鉴使用. 直接通过new DateHel ...

  9. oracle创建表空间、用户、用户授权、删除表空间、删除用户

    --创建临时表空间 create temporary tablespace test_temp --test_temp表空间名称 tempfile 'E:\oracle\product\10.2.0\ ...

  10. PQJ 1686(栈栈栈)

    PQJ  1686(栈栈栈) 用栈解决问题 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I6 ...