SQLServer的Lead和Lag实现

在这里不谈2012版本,因为那版本好像有了lead,lag函数,不过没试过。这里主要讲怎么自己实现

1、有表A如下数据

insert into A(id,name) values(1,'张三')
insert into A(id,name) values(2,'李四')
insert into A(id,name) values(3,'王五')

2、SQL如下

SELECT * FROM
(SELECT A.*,row_number() OVER(order by id) r  FROM A) k
,(SELECT A.*,row_number() OVER(order by id) r FROM A) B
WHERE k.R=B.R-1

另外就是R=R+1

时间: 2024-10-04 04:23:31

SQLServer的Lead和Lag实现的相关文章

SQL SERVER LEAD和LAG使用

示例:获取在48小时之内重复的记录 SELECT * FROM ( SELECT b.* , LAG(b.OperatorTime, 1, b.OperatorTime) OVER ( PARTITION BY b.No ORDER BY b.OperatorTime ) AS BeforTime , LEAD(b.OperatorTime, 1, b.OperatorTime) OVER ( PARTITION BY b.No ORDER BY b.OperatorTime ) AS Next

TSql Lead 和 Lag 函数

Lead 和 Lag 是TSql中的两个分析函数,执行顺序是在select语句之后,用于对查询的结果集进行前移和后移操作.如果窗口函数没有对查询的结果集分区,那么将整个结果集作为一个分区看待:如果窗口函数对查询的结果集分区,那么Lead和Lag就是对分区进行前移和后移操作. 窗口是由OVER 子句定义查询结果集内的窗口或用户指定的行集,其实就是在select的查询结果集中,将符合条件的多个数据行作为一个窗口,一个select的查询结果集可以划分为多个窗口,也可以仅有一个窗口:每一个窗口都独立于其

oracle中lead和lag函数 (转载)

这两个函数,是偏移量函数,其用途是:可以查出同一字段下一个值或上一个值. lead(col_name,num,flag) col_name是列名:num是取向下第几个值:flag是一个标志,也就是如果向下第几个值是空值的话就取flag: 例如lead(login_time,1,null)这个是向下取一个值,如果这个值为空则按空算,当然也可以用其他值替换. lag(col_name,num,flag) 和lead类似,col_name是列名:num是取向上第几个值:flag是一个标志,也就是如果向

Oracle Lead(),Lag()

Lead()就是取当前顺序的下一条记录,相对Lag()就是取当前顺序的上一行记录 语法结构: lead(value_expr [,offset][,default]) over([query_partition_clause] order by Order_by_clause) 参数说明: value_expr 值表达式,通常是字段,也可是是表达式.value_expr本身不支持分析函数,也就是lead不支持多层调用. offset 偏移,应该是很熟悉的数学概念了,或者是相对偏移,表格来开当前行

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 RE

Hive分析窗口函数(四) LAG,LEAD,FIRST_VALUE,LAST_VALUE

1.LAG功能是什么? 2.LEAD与LAG功能有什么相似的地方那个? 3.FIRST_VALUE与LAST_VALUE分别完成什么功能? 继续学习这四个分析函数. 注意: 这几个函数不支持WINDOW子句. Hive版本为 apache-hive-0.13.1 数据准备: 水电费 cookie1,2015-04-10 10:00:02,url2 cookie1,2015-04-10 10:00:00,url1 cookie1,2015-04-10 10:03:04,1url3 cookie1,

Hive函数:LAG,LEAD,FIRST_VALUE,LAST_VALUE

参考自大数据田地:http://lxw1234.com/archives/2015/04/190.htm 测试数据准备: create external table test_data ( cookieid string, createtime string, --页面访问时间 url string --被访问页面 ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile location '/user/jc_rc_ft

Hive窗口函数之LAG、LEAD、FIRST_VALUE、LAST_VALUE的用法

一.创建表: create table windows_ss ( polno string, eff_date string, userno string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile; 数据准备: P066666666666,2016-04-02 09:00:02,user01 P066666666666,2016-04-02 09:00:00,user02 P066666666666,20

SQLServer复杂SQL逻辑实现

一.问题 如下图,已有表a与表b的数据,如何通过SQL语句变成表c?表a是UserName相同时,根据Month降序汇总Salary数据:表b是UserName对应SumSalary的上限值:表c是从表a中取出表b上限值以下的分录,若分录的SumSalary值大于b表的Salary,则拆分出刚好汇总等于b表的Salary数. 表A的SQL语句: create table b( UserName nvarchar(200),Salary int ) create table User_Salary