您的位置:首页 > 数据库

lag lead 学习

2014-01-16 23:01 141 查看
lag lead 语法如下:

 




Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值

lag(exp_str,offset,defval) over()

exp_str 是要做对比的字段

offset 是exp_str字段的偏移量 比如说 offset 为3 则 拿exp_str的第一行和第四行对比,第二行和第五行,依次类推,offset的默认值为1!

defval是当该函数无值可用的情况下返回的值。Lead函数的用法类似。

--lag(exp_str),如下:

select ename,job,sal ,lag(sal) over(order by sal) last_sal from emp;

 ENAMEJOBSALLAST_SAL
1SMITHCLERK800
2JAMESCLERK950800
3ADAMSCLERK1100950
4WARDSALESMAN12501100
5MARTINSALESMAN12501250
6CLARKMANAGER13001250
7MILLERCLERK13001300
8TURNERSALESMAN15001300
9ALLENSALESMAN16001500
10BLAKEMANAGER28501600
11JONESMANAGER29752850
12SCOTTANALYST30002975
13FORDANALYST30003000
14KINGPRESIDENT50003000
--lead如同
select ename,job,sal ,lead(sal) over(order by sal) last_sal from emp;

 ENAMEJOBSALLAST_SAL
1SMITHCLERK800950
2JAMESCLERK9501100
3ADAMSCLERK11001250
4WARDSALESMAN12501250
5MARTINSALESMAN12501300
6CLARKMANAGER13001300
7MILLERCLERK13001500
8TURNERSALESMAN15001600
9ALLENSALESMAN16002850
10BLAKEMANAGER28502975
11JONESMANAGER29753000
12SCOTTANALYST30003000
13FORDANALYST30005000
14KINGPRESIDENT5000
--lad(sal,1,100)  over(order by sal)  sal向前便宜1,null值会被100填充
select ename,job,sal ,lag(sal,1,100) over(order by sal) last_sal from emp;

 ENAMEJOBSALLAST_SAL
1SMITHCLERK800100
2JAMESCLERK950800
3ADAMSCLERK1100950
4WARDSALESMAN12501100
5MARTINSALESMAN12501250
6CLARKMANAGER13001250
7MILLERCLERK13001300
8TURNERSALESMAN15001300
9ALLENSALESMAN16001500
10BLAKEMANAGER28501600
11JONESMANAGER29752850
12SCOTTANALYST30002975
13FORDANALYST30003000
14KINGPRESIDENT50003000
--lead(sal,1,100)  over(order by sal)   向后偏移1

select ename,job,sal ,lead(sal,1,100) over(order by sal) last_sal from emp;

 ENAMEJOBSALLAST_SAL
1SMITHCLERK800950
2JAMESCLERK9501100
3ADAMSCLERK11001250
4WARDSALESMAN12501250
5MARTINSALESMAN12501300
6CLARKMANAGER13001300
7MILLERCLERK13001500
8TURNERSALESMAN15001600
9ALLENSALESMAN16002850
10BLAKEMANAGER28502975
11JONESMANAGER29753000
12SCOTTANALYST30003000
13FORDANALYST30005000
14KINGPRESIDENT5000100
--偏移2如下

select ename,job,sal ,lag(sal,2) over(order by sal) last_sal from emp;

 ENAMEJOBSALLAST_SAL
1SMITHCLERK800
2JAMESCLERK950
3ADAMSCLERK1100800
4WARDSALESMAN1250950
5MARTINSALESMAN12501100
6CLARKMANAGER13001250
7MILLERCLERK13001250
8TURNERSALESMAN15001300
9ALLENSALESMAN16001300
10BLAKEMANAGER28501500
11JONESMANAGER29751600
12SCOTTANALYST30002850
13FORDANALYST30002975
14KINGPRESIDENT50003000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql lead lag