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)
相关推荐
Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。 代码如下:CREATE TABLE salaryByMonth( employeeNo varchar2(20)...
Oracle 分析函数详解 1. 自动汇总函数rollup,cube, 2. rank 函数, rank,dense_rank,row_number 3. lag,lead函数 4. sum,avg,的移动增加,移动平均数 5. ratio_to_report报表处理函数 6. first,last取基数的分析函数
Oracle分析函数——函数列表 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算一个组和数据窗口内表达式的...
1、oracle分析函数 中文: 主要含: rank() 和 dense_rank() first_value()和last_value() row_number() LAG() range开窗函数 2、oracle分析函数 英文: 比较详细
Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法 Oracle分析函数参考手册 开窗函数(over)详解
最近工作中用到 Mysql 要实现 oracle 的 lag 函数,网络上搜了不少文章,大都格式不清晰,或说明不清楚,所以自己做出例子来留个记录同时也分享一下。注解清晰,代码可直接用,建表样例数据sql都完整,直接可以跑。
主要介绍了Oracle查询中OVER (PARTITION BY ..)用法,内容和代码大家参考一下。
原创的matlab小程序,用于计算超前滞后相关,自带检验线,月资料和年资料都可以。
是第3名 LAG 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 NULL BTW: EXPERT ONE ON ONE 上讲的最详细,还有很多相关特性,文档看起来比较费劲 row_number()和rownum差不多,功能更强一点...
从论坛搜到的,感觉还不错,整理成了word文档,希望对大家也有用,同时也感谢原作者。...3. lag,lead函数 4. sum,avg,的移动增加,移动平均数 5. ratio_to_report报表处理函数 6. first,last取基数的分析函数
1,数值型函数(abs()、sign()、ceil()、floor()、power()、exp()、round()...);...6,分析函数(sum(...) over(...)、dense_rank、row_number()、lag()...); 7,其它函数(decode()、nvl()、nvl2()、least()...);
oracle lag 实现同一字段的前N行的数据和后N行的值.txt
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...
Oracle的解析函数为检查间隙提供了一种要快捷得多的方法。它们使你在使用完整的、面向集合的SQL处理的同时,仍然能够看到下一个行(LEAD)或者前一行(LAG)的数值。文中介绍了Oracle解析函数的格式。
SQL SERVER 2012 T-SQL新增几个聚合函数: FIRST_VALUE LAST_VALUE LEAD LAG,今天我们首先来简单分析下LEAD,希望对大家有所帮助,能够尽快熟悉这个聚合函数
本文主要介绍Oracle窗口函数的用法,讲解全统计、滚动统计(累积/均值)、根据时间范围统计、first_value/last_value、比较相邻记录具体的使用方法,需要的朋友可以参考下。