oracle lag與lead分析函式簡介

2021-06-19 22:41:42 字數 3260 閱讀 6229

lag與lead函式是跟偏移量相關的兩個分析函式,通過這兩個函式我們可以取到當前行列的偏移n行列的值 lag可以看著是正的向上的偏移 lead可以認為負的向下的偏移 具體我們來看幾個例子:

我們先看下scott的emp表的兩列資料:

select deptno, sal from scott.emp order by deptno

deptno

sal 10

2450.00 10

5000.00 10

1300.00 20

2975.00 20

3000.00 20

1100.00 20

800.00 20

3000.00 30

1250.00 30

1500.00 30

1600.00 30

950.00 30

2850.00 30

1250.00

ok那現在比方我有個這樣的需求(我們只看sal列)我想問你2450的上乙個值是多少?回答是沒有 那5000的上乙個值是多少?是:2450 1300的上乙個值是多少呢?是:5000 ok以此類推我想得到當前值的上乙個值

5000.00

2450

1300.00

5000

2975.00

1300

3000.00

2975

1100.00

3000

...       ...

1250.00   2850

ok就這樣的需求 那我們現在用sql應該如何寫呢?是的你猜對了就是用lag分析函式:

select deptno, sal a, lag(sal, 1, sal) b over(order by deptno)

from scott.emp

deptno

a b 10

2450.00

2450 --ps:這裡的之所以是2450是因為lag(sal, 1, sal)我讓它給了他本身的值 10

5000.00

2450 10

1300.00

5000 20

2975.00

1300 20

3000.00

2975 20

1100.00

3000 20

800.00

1100 20

3000.00

800 30

1250.00

3000 30

1500.00

1250 30

1600.00

1500 30

950.00

1600 30

2850.00

950 30

1250.00

2850

是的就這麼簡單你看出a列與b列之間有何聯絡了吧 相對a列b列是她的上乙個值

關於lead她就剛好與lag相反了

select deptno, sal a, lead(sal, 1, sal) over(order by deptno) b

from scott.emp

deptno

a b 10

2450.00

5000 10

5000.00

1300 10

1300.00

2975 20

2975.00

3000 20

3000.00

1100 20

1100.00

800 20

800.00

3000 20

3000.00

1250 30

1250.00

1500 30

1500.00

1600 30

1600.00

950 30

950.00

2850 30

2850.00

1250 30

1250.00

1250

相對a列b列是她的下乙個值

另外那個偏移值1是可以隨便取的如果是2那就是偏移兩個值了

select deptno, sal a, lag(sal, 2,null) over(order by deptno) b

from scott.emp

deptno

a b

10 2450.00

--注意這裡是null空了 10

5000.00

10 1300.00

2450  --a列1300的上兩個值是多少?2450是吧 20

2975.00

5000 20

3000.00

1300 20

1100.00

2975 20

800.00

3000 20

3000.00

1100 30

1250.00

800 30

1500.00

3000 30

1600.00

1250 30

950.00

1500 30

2850.00

1600 30

1250.00

950

ok 那其實lag,lead還可以加上分組偏移的

select deptno,

sal a,

lag(sal, 1, null) over(

partition by deptno order by deptno) b

from scott.emp

deptno

a b 10

2450.00

10 5000.00

2450 10

1300.00

5000 20

2975.00

20 3000.00

2975 20

1100.00

3000 20

800.00

1100 20

3000.00

800 30

1250.00

30 1500.00

1250 30

1600.00

1500 30

950.00

1600 30

2850.00

950 30

1250.00

2850

注意deptno不同的分組間的臨界值你看明白了吧

**:

oracle lag與lead分析函式簡介

lag與lead函式是跟偏移量相關的兩個分析函式,通過這兩個函式我們可以取到當前行列的偏移n行列的值 lag可以看著是正的向上的偏移 lead可以認為負的向下的偏移 具體我們來看幾個例子 我們先看下scott的emp表的兩列資料 select deptno,sal from scott.emp or...

七分與三分

田力合為男,女子合為好。男人 難人也 女人 亦好人!七畫是 男 三畫是 女 七 加 三 才是十全十美。於是,男人拿走七分權利,女人只有三分的反抗!體力上男人是七,女人是三。但耐力上女人是七,男人是三。所以面對情敵 男人們通常都是短兵相接,武力解決 女人則更喜歡明徵暗鬥的拉鋸戰!男人們聊天,七分談理想...

二分與三分

其實二分,三分與分治的思想差不多,都是對乙個問題的分段操作 前提為有序 qwq 二分法,在乙個單調有序的集合或函式中查詢乙個解,每次分為左右兩部分,判斷解在哪個部分中並調整上下界,直到找到目標元素,每次二分後都將捨棄一半的查詢空間,因此效率很高。例如,對於在實數區間 l,r 內遞增的連續函式f x ...