Khám phá hàm Lag và Lead trong SQL

Khám phá hàm Lag và Lead trong SQL

Trong phân tích dữ liệu, hàm LAG() LEAD() sẽ công cụ hỗ trợ đắc lực cho việc so sánh giá trị hiện tại với giá trị liền trước hoặc liền sau điều thường xuyên xảy ra từ theo dõi xu hướng doanh thu, hành vi người dùng, đến hiệu suất hệ thống. đơn giản, hai hàm này giúp bạn dễ dàng truy xuất dữ liệu từ dòng trước hoặc sau trong bảng, không cần viết truy vấn phức tạp hay sử dụng nhiều phép JOIN. Đây công cụ cực kỳ hữu ích để xử dữ liệu tính thứ tự.

UniTrain sẽ giúp bạn hiểu cách dùng qua dụ thực tế ứng dụng trong công việc. 

HÀM LAG 

Hàm LAG() cho phép lấy giá trị từ dòng trước đó trong kết quả truy vấn. Tên gọi của hàm cũng thể hiện rõ chức năng của nó – “lùi lại phía sau”. 

Cú pháp: 

LAG(expression [, offset [, default]]) OVER (

[PARTITION BY partition_expression, …]

ORDER BY sort_expression [ASC | DESC], …)

  • expression: Là cột hoặc giá trị bạn muốn lấy. 
  • offset: Tham số tùy chọn, chỉ định số dòng phía sau dòng hiện tại mà bạn muốn xem. Nếu không ghi rõ, mặc định là 1. 
  • default: Tham số tùy chọn, giá trị trả về khi hàm LAG() cố gắng truy cập vượt ra ngoài dòng đầu tiên. Nếu không chỉ định, giá trị mặc định là NULL. 
  • PARTITION BY: Chia tập kết quả thành các phần (phân vùng), và hàm LAG() chỉ hoạt động trong mỗi phân vùng riêng biệt. 
  • ORDER BY: Xác định thứ tự của các dòng trong tập kết quả hoặc từng phân vùng. 

Giống như các hàm khác, LAG() yêu cầu phải có mệnh đề OVER. Mệnh đề này có thể nhận các tham số tùy chọn, sẽ được giải thích sau. Với LAG(), bạn bắt buộc phải chỉ định ORDER BY trong mệnh đề OVER, với một cột hoặc danh sách các cột để xác định thứ tự sắp xếp các dòng. 

Ví dụ chúng ta có một bảng chi tiết đơn hàng (SalesOrderDetail) thể hiện doanh thu của từng dòng đơn hàng:
Chi tiết đơn hàng và doanh thu của từng đơnMục tiêu của chúng ta phân tích sự biến động doanh thu giữa các dòng đơn hàng liền kề. Cụ thể, chúng ta muốn tính xem xét, so sánh doanh thu qua các đơn hàng:

SELECT
SalesOrderDetailID,
LineTotal,
LAG(LineTotal)
OVER (ORDER BY SalesOrderDetailID) AS PrevLineTotal
FROM
SalesLT.SalesOrderDetail;

Kết quả

So sánh doanh thu của từng đơn hàng

HÀM LEAD 

Hàm LEAD() là sẽ ngược lại với hàm LAG(). Nó cho phép bạn lấy giá trị từ dòng tiếp theo trong tập kết quả — tức là nhìn trước một hoặc nhiều dòng trong dữ liệu. 

Cú pháp hàm LEAD:

LEAD(expression [, offset [, default]])
OVER (
[PARTITION BY partition_expression, … ] ORDER BY sort_expression [ASC | DESC], …)
  • expression: Cột hoặc biểu thức bạn muốn lấy từ dòng tiếp theo. 
  • offset (tuỳ chọn): Số dòng muốn nhìn tới (mặc định là 1 dòng kế tiếp). 
  • default (tuỳ chọn): Giá trị trả về nếu dòng kế tiếp không tồn tại. 
  • OVER(…): Bắt buộc, xác định cách sắp xếp và (nếu cần) phân vùng dữ liệu. 

Tương tự với bảng dữ liệu trên:  

Chi tiết đơn hàng và doanh thu của từng đơn

Muốn xác định tổng doanh thu (LineTotal) của dòng đơn hàng kế tiếp, so với từng dòng hiện tại. Cụ thể, bạn đang truy xuất thông tin “tương lai gần” trong tập dữ liệu – tức giá trị kế tiếp theo thứ tự SalesOrderDetailID. 

SELECT
SalesOrderDetailID,
LineTotal,
LEAD(LineTotal) OVER (ORDER BY SalesOrderDetailID) AS NextLineTotal
FROM
SalesLT.SalesOrderDetail;

Kết quả truy vấn:

So sánh doanh thu với Lead

Kết luận 

Hàm LAG() và LEAD() là hai công cụ rất hữu ích trong phân tích dữ liệu, giúp truy xuất nhanh chóng giá trị của dòng liền trước hoặc liền sau mà không cần viết các truy vấn phức tạp hay dùng nhiều phép JOIN. Chúng đặc biệt hiệu quả khi làm việc với dữ liệu có tính thứ tự hoặc dữ liệu phân vùng, cho phép bạn dễ dàng so sánh, phân tích xu hướng, biến động hay dự báo dựa trên các giá trị liền kề trong bảng.

Việc sử dụng linh hoạt hàm LAG() và LEAD() sẽ giúp tối ưu quá trình xử lý dữ liệu, tiết kiệm thời gian và tăng tính chính xác trong phân tích, từ đó hỗ trợ đưa ra quyết định nhanh chóng và hiệu quả trong công việc. 

Theo dõi Fanpage UniTrain để khám phá thêm nhiều thông tin hữu ích nhé.

Xem thêm

Ứng dụng SQL trong xử lý dữ liệu

Phân biệt WHERE và HAVING trong SQL

SQL và các hàm xử lý kiểu dữ liệu Date thông dụng

Bài viết liên quan
[RECAP] Training Top 20 – myInsight – MDS Datathon Challenge 2025 – CLB Toán ứng dụng & Khoa học dữ liệu (MDS) – Đại học Ngoại Thương CSII TP. HCM (FTU2)

Tối ngày 18/05/2025, buổi training dành riêng cho Top 20 đội thi xuất sắc nhất cuộc thi myInsight – MDS Datathon Challenge 2025 đã diễn ra vô cùng thành công thông

Xem thêm
Khám Phá Tính Năng Nhóm và Phân Nhóm Dữ Liệu trong Power BI

Trong quá trình xây dựng biểu đồ, Power BI Desktop sẽ tự động tổng hợp dữ liệu thành các nhóm dựa trên các giá trị có trong tập dữ liệu gốc.

Xem thêm
[RECAP] Chuỗi Workshop MARKET-A – CLB Chứng khoán SCUE – Đại học Kinh tế TP. HCM (UEH)

Chiều ngày 15/05/2025 vừa rồi, UniTrain đã hân hạnh có mặt với vai trò là Nhà tài trợ Bạc tại buổi Workshop 2: OPTIVEST thuộc chuỗi chương trình Workshop MARKET-A do

Xem thêm
[RECAP] Cuộc thi Chuyên gia Phân tích Đầu Tư – IAE mùa 6, năm 2025 – Nhóm Sinh viên Nghiên cứu Tài chính (SFR) – Đại học Kinh tế TP. HCM (UEH)

Tối ngày 14/05/2025 vừa rồi, chung kết cuộc thi Chuyên gia Phân tích Đầu Tư – IAE mùa 6, năm 2025 do nhóm Sinh viên Nghiên cứu Tài chính (SFR) thuộc

Xem thêm