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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

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://javaforall.net/117919.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于时间的反向传播算法BPTT(Backpropagation through time)[通俗易懂]

    基于时间的反向传播算法BPTT(Backpropagation through time)[通俗易懂]本文介绍BPTT的原理和实现,是读“RecurrentNeuralNetworksTutorial,Part3–BackpropagationThroughTimeandVanishingGradients”的读书笔记,代码也来自于这篇文章,加了部分注释。

    2022年6月23日
    27
  • ffmpeg源码编译_开源代码平台

    ffmpeg源码编译_开源代码平台 注:本文来转自http://www.aurora-x.net/wiki/CompileFFmpegWindows,前段时间用ffempg和x264开发了h264编码和解码的Filter,这篇文章是我编译ffmeg工程从网上搜到的最好的一份文档,及其详尽,我就是按照这个文档的一步一步地来做,第一次就顺利地完成了ffmepg的编译。如果你也在学习ffmpeg,来仔细学习一下这份文档吧,以后

    2022年9月25日
    2
  • 贴片电阻0805,1206是什么意思_贴片电阻识别及型号

    贴片电阻0805,1206是什么意思_贴片电阻识别及型号0805封装尺寸/0402封装尺寸/0603封装尺寸/1206封装尺寸封装尺寸与功率关系:  02011/20W  04021/16W  06031/10W  08051/8W  12061/4W封装尺寸与封装的对应关系  0402=1.0mmx0.5mm  0603=1.6mmx0.8mm  0805=2.0mmx1.2mm  120

    2022年8月21日
    15
  • 计算机组成原理知识点

    计算机组成原理知识点计算机体系结构(ComputerArchitecture)主要研究硬件和软件功能的划分,确定硬件和软件的界面,哪部分功能由硬件系统来完成,哪部分功能由软件系统来完成。计算机组成原理(ComputerOrganization)是依据计算机体系结构,在确定且分配了硬件子系统的概念结构和功能特性的基础上,设计计算机各部件的具体组成,以及它们之间的连接关系,实现机器指令级的各种功能和特性,这点上说

    2022年6月1日
    36
  • SSH+activity工作流集成开发「建议收藏」

    SSH+activity工作流集成开发「建议收藏」一直没有更新最近,把以前的资料整理下。SSH的集成配置清查看上一篇struts-2.3.24+spring-framework-4.1.6.RELEASE+hibernate-release-4.3.10.Final集成开发导入activity工作流需要的jaractiviti-bpmn-converter-5.16.4.jaractiviti-bpmn-layout-5

    2022年5月18日
    41
  • apache StopWatch基本使用

    apache StopWatch基本使用转载自:http://blog.csdn.net/eg366/article/details/11835191pom:[html] viewplaincopydependency>      groupId>commons-langgroupId>      artifactId>commons-langarti

    2022年6月23日
    125

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号