Oracle11gr2分析函式新特性(三)
在11gr2中,Oracle分析函式的功能進一步增強。
這篇介紹分析函式LAG和LEAD的增強。
Oracle11gr2分析函式新特性(一):http://yangtingkun.itpub.net/post/468/491115
Oracle11gr2分析函式新特性(二):http://yangtingkun.itpub.net/post/468/491137
11gr2對LAG和LEAD函式進行了增強,新增了IGNORE NULLS的功能。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> create table t (id number, name varchar2(30), type varchar2(20));
表已建立。
SQL> insert into t select rownum, object_name, object_type from dba_objects;
已建立71968行。
SQL> commit;
提交完成。
SQL> select id, name, type
2 from t
3 where rownum < 11;
ID NAME TYPE
---------- ------------------------------ --------------------
508 SYS_C00644 INDEX
509 SYS_LOB0000000528C00002$$ LOB
510 KOTTB$ TABLE
511 SYS_C00645 INDEX
512 SYS_LOB0000000532C00002$$ LOB
513 KOTAD$ TABLE
514 SYS_C00646 INDEX
515 SYS_LOB0000000536C00002$$ LOB
516 KOTMD$ TABLE
517 SYS_C00647 INDEX
已選擇10行。
LAG和LEAD可以獲取當前行前或後N行的記錄:
SQL> select id,
2 name,
3 type,
4 lag(name) over(order by id) n_name,
5 lead(name) over(order by id) l_name
6 from t
7 where rownum < 11;
ID NAME TYPE N_NAME L_NAME
--- ------------------------- ------ ------------------------- -------------------------
508 SYS_C00644 INDEX SYS_LOB0000000528C00002$$
509 SYS_LOB0000000528C00002$$ LOB SYS_C00644 KOTTB$
510 KOTTB$ TABLE SYS_LOB0000000528C00002$$ SYS_C00645
511 SYS_C00645 INDEX KOTTB$ SYS_LOB0000000532C00002$$
512 SYS_LOB0000000532C00002$$ LOB SYS_C00645 KOTAD$
513 KOTAD$ TABLE SYS_LOB0000000532C00002$$ SYS_C00646
514 SYS_C00646 INDEX KOTAD$ SYS_LOB0000000536C00002$$
515 SYS_LOB0000000536C00002$$ LOB SYS_C00646 KOTMD$
516 KOTMD$ TABLE SYS_LOB0000000536C00002$$ SYS_C00647
517 SYS_C00647 INDEX KOTMD$
已選擇10行。
如果LAG或LEAD的表示式結果為空,則返回結果也是空:
SQL> select id,
2 name,
3 type,
4 lag(decode(type, 'LOB', null, name)) over(order by id) n_name,
5 lead(decode(type, 'LOB', null, name)) over(order by id) l_name
6 from t
7 where rownum < 11;
ID NAME TYPE N_NAME L_NAME
---------- ------------------------- ------ ------------------------- ----------------------
508 SYS_C00644 INDEX
509 SYS_LOB0000000528C00002$$ LOB SYS_C00644 KOTTB$
510 KOTTB$ TABLE SYS_C00645
511 SYS_C00645 INDEX KOTTB$
512 SYS_LOB0000000532C00002$$ LOB SYS_C00645 KOTAD$
513 KOTAD$ TABLE SYS_C00646
514 SYS_C00646 INDEX KOTAD$
515 SYS_LOB0000000536C00002$$ LOB SYS_C00646 KOTMD$
516 KOTMD$ TABLE SYS_C00647
517 SYS_C00647 INDEX KOTMD$
已選擇10行。
而新增的IGNORE NULLS功能,可以忽略NULL結果,去尋找另一個滿足條件的結果:
SQL> select id,
2 name,
3 type,
4 lag(decode(type, 'LOB', null, name)) ignore nulls over(order by id) n_name,
5 lead(decode(type, 'LOB', null, name)) ignore nulls over(order by id) l_name
6 from t
7 where rownum < 11;
ID NAME TYPE N_NAME L_NAME
---------- ------------------------- ------ ------------------------- ----------------------
508 SYS_C00644 INDEX KOTTB$
509 SYS_LOB0000000528C00002$$ LOB SYS_C00644 KOTTB$
510 KOTTB$ TABLE SYS_C00644 SYS_C00645
511 SYS_C00645 INDEX KOTTB$ KOTAD$
512 SYS_LOB0000000532C00002$$ LOB SYS_C00645 KOTAD$
513 KOTAD$ TABLE SYS_C00645 SYS_C00646
514 SYS_C00646 INDEX KOTAD$ KOTMD$
515 SYS_LOB0000000536C00002$$ LOB SYS_C00646 KOTMD$
516 KOTMD$ TABLE SYS_C00646 SYS_C00647
517 SYS_C00647 INDEX KOTMD$
已選擇10行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-614056/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11gr2分析函式新特性(二)Oracle函式
- Oracle11gr2分析函式新特性(一)Oracle函式
- Oracle11gr2資料泵新特性(三)Oracle
- oracle 21c 新特性之 CHECKSUM 分析函式Oracle函式
- Oracle11新特性——PLSQL函式快取結果(三)OracleSQL函式快取
- Java8的新特性--函式式介面Java函式
- java8 新特性之函式式介面Java函式
- Spring 5 新特性:函式式Web框架Spring函式Web框架
- JDK8新特性之函式式介面JDK函式
- Java8新特性探索之函式式介面Java函式
- PHP 7.4 新特性之箭頭函式PHP函式
- PHP新特性之閉包、匿名函式PHP函式
- PHP 7.4 新特性 —— 箭頭函式 2.0PHP函式
- Oracle11gr2資料泵新特性(五)Oracle
- Oracle11gr2資料泵新特性(四)Oracle
- Oracle11gr2資料泵新特性(二)Oracle
- Oracle11gr2資料泵新特性(一)Oracle
- Java8新特性-四大核心函式式介面Java函式
- Oracle11新特性——PLSQL新特性(三)OracleSQL
- 【Mysql】MySQL 5.7新特性之Generated Column(函式索引)MySql函式索引
- Oracle11.2新特性之listagg函式Oracle函式
- JDK1.8新特性:Lambda表示式語法和內建函式式介面JDK函式
- Oracle分析函式七——分析函式案例Oracle函式
- Oracle11新特性——PLSQL函式快取結果(一)OracleSQL函式快取
- Oracle11新特性——PLSQL函式快取結果(二)OracleSQL函式快取
- C++11新特性(三):語言特性C++
- 三、函式函式
- 【MySQL】5.7新特性之三MySql
- Oracle聚合函式/分析函式Oracle函式
- java8特性-函式式介面Java函式
- PHP 核心特性 - 匿名函式PHP函式
- MySQL · 特性分析 · MySQL 5.7新特性系列一MySql
- 分析函式函式
- Oracle 12c新特性之:APPROX_COUNT_DISTINCT 函式OracleAPP函式
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- [Oracle]高效的SQL語句之分析函式(三)OracleSQL函式
- 【Java8新特性】還沒搞懂函式式介面?趕快過來看看吧!Java函式
- Java 8新特性(三):Optional類Java