`

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

 
阅读更多

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)的详解

    Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。 代码如下:CREATE TABLE salaryByMonth( employeeNo varchar2(20)...

    ORACLE分析函数.pdf

    Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析和报告的能力,提高了查询性能。以下是对Oracle分析...

    Oracle10gR2分析函数(中英对照版).pdf

    - **LAG() 和 LEAD()**:这两个函数用于访问窗口中前后的行数据,常用于计算增长率或变化率。 - **ROW_NUMBER()**:为窗口中的每行分配一个唯一的行号,可用于创建行编号或实现数据排名。 - **RANK(), DENSE_...

    oracle分析函数全面解析

    窗口函数包括像`LEAD()`, `LAG()`, `CUME_DIST()`, `PERCENT_RANK()`等,它们在数据透视、趋势分析和预测中非常有用。 **4. 报表函数** 报表函数通常是分析函数的实用应用,例如计算累计销售额、同比增长率等。...

    oracle分析函数

    分析函数可以与子查询、连接、CASE语句等配合,实现复杂的数据分析和报告。例如,可以先用分析函数计算每个员工的月度平均销售额,然后通过子查询找出销售额超过平均值的员工。 总之,Oracle分析函数是数据分析师...

    Oracle 分析函数使用介绍

    在本文中,我们将深入探讨Oracle分析函数的使用方法,以及它们如何帮助我们进行数据统计和分析。 1. **窗口函数概念** 分析函数也被称为窗口函数,因为它们在数据集的一个“窗口”或分区上操作,这个窗口可以包含...

    oracle分析函数介绍

    Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析的能力,提高了查询性能,使得复杂的数据处理变得...

    oracle lag 实现同一字段的前N行的数据和后N行的值

    通过使用Oracle的`LAG`和`LEAD`函数,我们可以轻松地访问当前行前后任意行的数据,这对于数据分析和报表制作非常有用。特别是在处理时间序列数据时,这些函数能够帮助我们快速计算出诸如增长率、趋势等重要指标。...

    Oracle 分析函数

    通过使用分析函数,我们可以快速获取每个地区的每月总费用、累计总费用、平均费用,甚至可以计算逐月增长率,而无需复杂的子查询或存储过程。 总的来说,Oracle 分析函数极大地增强了SQL的分析能力,使得数据分析师...

    相对数据

    4. **窗口函数**:SQLPL中的窗口函数,如LEAD、LAG、RANK、DENSE_RANK等,是处理相对数据的强大工具。它们可以在数据集上定义一个“窗口”,并根据这个窗口内的数据执行计算。 5. **自连接查询**:在SQL中,通过表...

Global site tag (gtag.js) - Google Analytics