Trong bài này mình sẽ hướng dẫn cách sử dụng hàm LEAD trong SQL Server thông qua cú pháp và ví dụ thực tế. Bài viết này được đăng tại greensql.net, không được copy dưới mọi hình thức.
Mục lục[ẩn]
Hàm LEAD là một hàm phân tích cho phép bạn truy vấn nhiều hàng trong một bảng mà không cần phải nối bảng với chính nó. Nó trả về các giá trị từ hàng tiếp theo trong bảng.
Cú pháp của hàm LEAD trong SQL Server (Transact-SQL) là:
?12LEAD ( expression [, offset [, default] ] )OVER ( [ query_partition_clause ] order_by_clause )
Trong đó:
expression: Một biểu thức có thể chứa các hàm dựng sẵn khác, nhưng không thể chứa bất kỳ hàm phân tích nào.
offset: Không bắt buộc. Nó là phần bù vật lý từ hàng hiện tại trong bảng. Nếu tham số này bị bỏ qua, mặc định là 1.
default: Không bắt buộc. Đó là giá trị được trả về nếu phần bù đi ra khỏi giới hạn của bảng. Nếu tham số này bị bỏ qua, mặc định là null.
query_partition_clause: Không bắt buộc. Nó được sử dụng để phân vùng kết quả thành các nhóm dựa trên một hoặc nhiều biểu thức.
order_by_clause: Không bắt buộc. Nó được sử dụng để sắp xếp dữ liệu trong mỗi phân vùng.
‒‒:‒‒/‒‒:‒‒ Skip
Hàm LEAD có thể được sử dụng trong các phiên bản sau của SQL Server (Transact-SQL):
SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012
Nếu chúng ta có một bảng employees chứa dữ liệu sau:
employee_number
last_name
first_name
salary
dept_id
12009
Sutherland
Barbara
54000
45
34974
Yates
Fred
80000
45
34987
Erickson
Neil
42000
45
45001
Parker
Sally
57500
30
75623
Gates
Steve
65000
30
Và chúng ta chạy câu lệnh SQL sau:
?123SELECT dept_id, last_name, salary,LEAD (salary,1) OVER (ORDER BY salary) AS next_highest_salaryFROM employees;
Nó sẽ trả về kết quả sau:
dept_id
last_name
salary
next_highest_salary
45
Erickson
42000
54000
45
Sutherland
54000
57500
30
Parker
57500
65000
30
Gates
65000
80000
45
Yates
80000
NULL
Trong ví dụ này, hàm LEAD sẽ sắp xếp theo thứ tự tăng dần tất cả các giá trị salary trong bảng employees và sau đó trả về mức lương cao nhất tiếp theo kể từ sử dụng offset là 1.
Nếu sử dụng offset bằng 2 thay vào đó, nó sẽ trả lại mức lương cao hơn 2 mức lương. Nếu sử dụng offset bằng 3, nó sẽ trả lại mức lương cao hơn 3 …. và cứ thế.
Sử dụng Partitions
Bây giờ hãy xem xét một ví dụ phức tạp hơn trong đó sử dụng mệnh đề truy vấn partition để trả lại mức lương cao nhất tiếp theo cho mỗi nhân viên trong bộ phận của họ.
(adsbygoogle = window.adsbygoogle || []).push({});
Nhập câu lệnh SQL sau:
?123SELECT dept_id, last_name, salary,LEAD (salary,1) OVER (PARTITION BY dept_id ORDER BY salary) AS next_highest_salaryFROM employees;
Nó sẽ trả về kết quả sau:
dept_id
last_name
salary
next_highest_salary
30
Parker
57500
65000
30
Gates
65000
NULL
45
Erickson
42000
54000
45
Sutherland
54000
80000
45
Yates
80000
NULL
SyntaxHighlighter.config.stripBrs = false; SyntaxHighlighter.config.tagName = “pre”; SyntaxHighlighter.defaults[“gutter”] = true; SyntaxHighlighter.all();