Chức năng dẫn đầu trong oracle
Hàm LEAD trong Oracle là một hàm Phân tích có khả năng tính toán một biểu thức trên các hàng tiếp theo (các hàng sẽ đến sau hàng hiện tại) và trả về giá trị cho hàng hiện tại . Cú pháp chung của LEAD được hiển thị bên dưới:
LEAD (<expr>, <offset>, <default>) OVER (<analytic_clause>)
Hãy lấy một ví dụ để hiểu về nó. Đầu tiên, hãy chuẩn bị dữ liệu mẫu
CREATE TABLE "DEPT" ( "DEPTNO" NUMBER(2,0), "DNAME" VARCHAR2(14), "LOC" VARCHAR2(13), CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") ) CREATE TABLE "EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "DEPT" ("DEPTNO") ENABLE ); SQL> desc emp Name Null? Type ---- ---- ----- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) SQL> desc dept Name Null? Type ---- ----- ---- DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13) insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK'); insert into dept values(20, 'RESEARCH', 'DALLAS'); insert into dept values(30, 'RESEARCH', 'DELHI'); insert into dept values(40, 'RESEARCH', 'MUMBAI'); commit; insert into emp values( 7839, 'Clark', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 28573, null, 10 ); insert into emp values( 7782, 'Clara', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 0, null, 10 ); insert into emp values( 7934, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 0, null, 10 ); insert into emp values( 7788, 'Scott', 'ANALYST', 7788, to_date('9-6-2012','dd-mm-yyyy'), 30000, null, 20 ); insert into emp values( 7902, 'Bill', 'ANALYST', 7832, to_date('9-6-2012','dd-mm-yyyy'), 30000, null, 20 ); insert into emp values( 7876, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 11000, null, 20 ); insert into emp values( 7369, 'TPM1', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 8000, null, 20 ); insert into emp values( 7698, 'A1', 'ANALYST', 7788, to_date('9-6-2017','dd-mm-yyyy'), 28500, null, 30 ); insert into emp values( 7499, 'A2', 'ANALYST', 7698, to_date('9-7-2017','dd-mm-yyyy'), 16000, null, 30 ); insert into emp values( 7844, 'A3', 'ANALYST', 7698, to_date('9-7-2017','dd-mm-yyyy'), 15000, null, 30 ); insert into emp values( 7654, 'A4', 'ANALYST', 7698, to_date('9-7-2017','dd-mm-yyyy'), 12500, null, 30 ); insert into emp values( 7521, 'A5', 'ANALYST', 7698, to_date('9-7-2017','dd-mm-yyyy'), 12500, null, 30 ); insert into emp values( 7900, 'A6', 'ANALYST', 77698, to_date('9-7-2017','dd-mm-yyyy'), 0, null, 30 ); commit;
Bây giờ chúng ta có thể sử dụng Hàm Lead trong Oracle theo truy vấn dưới đây
SQL> SELECT deptno, empno, sal,LEAD(sal, 1, 0) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) NEXT_LOWER_SAL FROM emp;
Lấy giá trị mặc định khác nhau
SELECT deptno, empno, sal,LEAD(sal, 1,100) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) NEXT_LOWER_SAL FROM emp;
Nếu không cung cấp bất kỳ giá trị nào cho mặc định, thì nó sẽ cho giá trị null ở nơi không có giá trị nào. Điều này được hiển thị trong truy vấn dưới đây
SELECT deptno, empno, sal,LEAD(sal) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) NEXT_LOWER_SAL FROM emp;
Hàm LAG trong Oracle
Tương tự, LAG cung cấp kỹ thuật tính toán trên các hàng trước đó và trả về giá trị cho hàng hiện tại
LAG (<expr>, <offset>, <default>) OVER (<analytic_clause>)
Lấy cùng một bộ dữ liệu làm earliar
SQL> SELECT deptno, empno, sal,LAG(sal, 1,0) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) LAST_HIGH_SAL FROM emp;
Nếu không cung cấp bất kỳ giá trị nào cho mặc định, thì nó sẽ cho giá trị null ở nơi không có giá trị nào. Điều này được hiển thị trong truy vấn dưới đây
SQL> SELECT deptno, empno, sal,LAG(sal) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) LAST_HIGH_SAL FROM emp;
Tôi hy vọng bạn thích bài viết này về chức năng Dẫn và trễ trong Oracle, chúng có thể rất hữu ích trong nhiều lĩnh vực. Vui lòng cung cấp phản hồi
Các bài viết có liên quan
Câu hỏi phỏng vấn Oracle
Hàm phân tích trong oracle
Hàm RANK trong Oracle
Hàm Dense_Rank trong Oracle
Hàm NULLIF trong Oracle
https://docs.oracle .com / en / database / oracle / oracle-database / 12.2 / sqlrf / LEAD.html # GUID-0A0481F1-E98F-4535-A739-FCCA8D1B5B77