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)

转载于:https://www.cnblogs.com/bhlsheji/p/4297390.html

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

  1. 【DB笔试面试597】在Oracle中,获取执行计划有哪几种方法?

    ♣题目部分 在Oracle中,获取执行计划有哪几种方法? ♣答案部分 一般来说,有如下几种获取执行计划的方式: 1.AUTOTRACE方式 AUTOTRACE是Oracle自带的客户端工具SQL*Pl ...

  2. Mysql 查询blob数据很慢,关于oracle中clob字段查询慢的问题及解决方法

    关于oracle中clob字段查询慢的问题及解决方法 最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了. blob字段直 ...

  3. oracle中lag()函数和lead()函数的用法(图文)

    lag和lead函数可以在同一次查询中取出同一字段的前N行数据(lag)和后N行数据(lead). 这种字段可以使用对相同表的表连接来实现,不过使用lag和lead函数具有更高的效率. 语法: LAG ...

  4. oracle lag()_lead(),ORACLE中lag() lead()函数使用

    链接:http://www.xifenfei.com/784.html 标题:lag() lead()函数使用 作者:惜分飞版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.] 1 ...

  5. oracle下lag和lead分析函数

    Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列. 这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率. 语法: [sql ...

  6. oracle的LAG和LEAD分析函数

    Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值.这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率. lag的语法如下: lead的语法如下: l ...

  7. oracle lead_lag wm_concat,oracle函数 lag()和lead()

    [语法] lag(EXPR,,) LEAD(EXPR,,) [功能]表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的) lead () 下一 ...

  8. Oracle函数lag和lead详解

    1.函数功能 Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值.这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率. 2.lag和lead语法: a ...

  9. 【mysql】使用变量实现类似oracle中lag函数功能

    mysql使用变量实现类似oracle中的lag函数功能 说明: 有一个订单表,每次下单都会记录是否使用了券,现模拟一个需求,将订单表插入日志表达到记录用户上一次是否用券以及此订单是否用券的情况 #- ...

最新文章

  1. [ JSOI 2015 ] Salesman
  2. SAP MM 如何看一个Inbound Delivery单据相关的IDoc?
  3. 成功解决 from ._conv import register_converters as _register_converters
  4. oracle 日志丢失,Oracle联机日志文件丢失解决方法一例
  5. java)_Java NIO系列教程(一) Java NIO 概述
  6. activiti7流程设计器_基于容器和微服务应用的架构:容器设计原则
  7. ajax 输入一个整数,jQuery.ajax()仅适用于整数
  8. Android开发/源码资源汇总
  9. Repast HPC1.0.1实例运行总结
  10. 大学论文的研究框架是什么?
  11. sqlite创建表格
  12. java项目上线发布的流程
  13. 关系图谱在风控体系的应用与实践
  14. 牛客网算法之洗牌详解
  15. 微服务: 立志做个伟大的项目
  16. zic2xpm - 将 ZIICS 象棋片段 (chess pieces) 转换为 XBoard (XPM/XIM) 片段的工具。
  17. HourGlass源码阅读
  18. 系统平台新店铺运营思路
  19. 中科院大牛博士是如何进行文献检索和阅读的(好习惯受益终生)
  20. SAP BW报表使用操作手册——系统登录

热门文章

  1. ArcMap 导入 wrl_ai文件导入c4d没反应怎么办? c4d导入ai源文件失败的原因分析_Illustrator教程_平面设计...
  2. rfid在高速公路管理中的应用_RFID亮灯电子标签在仓储管理中的应用
  3. 测试面试题集-Python花式打印九九乘法口诀表
  4. 记一次坑爹报错之旅 -bash: /etc/profile: line 11: syntax error near unexpected token
  5. Messari前主管:一旦L2证明其实力,BSC上的团队将会迁移回以太坊
  6. SAP License:为什么一些现有成熟客户不愿意上S/4
  7. 怎么做一张优雅的数据源监控报表
  8. Teradata在中国银行业的应用简介
  9. 机器学习:用梯度下降法实现线性回归
  10. 动手动脑的问题以及课后实验性的问题