Oracle数据库中lead和lag函数用法示例 |
|
前言 Oracle数据库中的LEAD和LAG函数是窗口函数,它们允许你在查询中访问当前行的下一行(LEAD)或上一行(LAG)的值 。这些函数在处理时间序列数据、比较相邻行数据、计算差异等场景中非常有用 。 LAG函数的基本语法如下: LAG(value_expression [, offset] [, default]) OVER (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
)
以下是一个使用 假设你有一个名为 SELECT
salesperson,
sale_date,
amount,
LAG(amount) OVER (PARTITION BY salesperson ORDER BY sale_date) AS prev_amount
FROM sales;
在这个查询中, 请注意, Oracle数据库中的** LEAD函数的基本语法如下: LEAD(value_expression [, offset] [, default]) OVER (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
)
以下是一个使用 假设你有一个名为 SELECT
salesperson,
sale_date,
amount,
LEAD(amount) OVER (PARTITION BY salesperson ORDER BY sale_date) AS next_day_amount
FROM sales;
在这个查询中, 请注意, 和LAG函数的区别以及转换 LAG函数的格式和LEAD一样,而且是容易和LEAD混淆的 。不过看看它们翻译过来的意思,应该就能大概了解: LEAD :前导,向前; LAG:落后 。 它们就是对反义词 。 先看看个查询吧,并把lead的查询结果放在后面比较 。 SQL> select rownum 序号,Mons,cjl cjl_01,
2 LAG(cjl,1) over (order by mons desc) cjl_02,
3 LAG(cjl,2) over (order by mons desc) cjl_03,
4 LAG(cjl,3) over (order by mons desc) cjl_04,
5 LAG(cjl,4) over (order by mons desc) cjl_05,
6 LAG(cjl,5) over (order by mons desc) cjl_06,
7 LAG(cjl,6) over (order by mons desc) cjl_07,
8 LAG(cjl,7) over (order by mons desc) cjl_08,
9 LAG(cjl,8) over (order by mons desc) cjl_09
10 from test_value;
序号 MONS CJL_01 CJL_02 CJL_03 CJL_04 CJL_05 CJL_06 CJL_07 CJL_08 CJL_09
---------- --------------------------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
9 200809 400
8 200808 23 400
7 200807 600 23 400
6 200806 100 600 23 400
5 200805 356 100 600 23 400
4 200804 23 356 100 600 23 400
3 200803 300 23 356 100 600 23 400
2 200802 200 300 23 356 100 600 23 400
1 200801 250 200 300 23 356 100 600 23 400
-------------------------------------lead的数据在下面
9 200809 400 23 600 100 356 23 300 200 250
8 200808 23 600 100 356 23 300 200 250
7 200807 600 100 356 23 300 200 250
6 200806 100 356 23 300 200 250
5 200805 356 23 300 200 250
4 200804 23 300 200 250
3 200803 300 200 250
2 200802 200 250
1 200801 250 它们的区别最重要的在于: 1)LEAD 访问的是结果集合位于当前记录之后的数据 。 2)LAG 范围的是结果集合位于当前记录之前的数据 。 总结 到此这篇关于Oracle数据库中lead和lag函数用法示例的文章就介绍到这了,更多相关Oracle lead和lag函数内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |