Menu
CoddyTech

Các hàm LEAD và LAG

Thuộc phần Kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 61 trên 72.

Các hàm LEAD và LAG cho phép chúng ta truy cập giá trị của hàng hiện tại, lùi lại n bước hoặc tiến lên n bước.

Ví dụ, nếu muốn tính tỷ lệ doanh thu của công ty ở hàng hiện tại so với một tháng trước, ta có thể lấy giá trị của tháng trước:

idrevenuemonth
15325
24926
33937
47238
SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY MONTH) as prev_month_revenue
FROM table1 ORDER BY id

Thao tác này sẽ tạo bảng sau:

idrevenueprev_month_revenue
1532 
2492532
3393492
4723393

Theo cách này, chúng ta có thể tính tỷ lệ prev_month_revenue/revenue.

Nếu thay vào đó dùng hàm LEAD, hàm này sẽ lấy doanh thu của tháng tiếp theo ở mỗi hàng:

SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id
idrevenuenext_month_revenue
1532492
2492393
3393723
4723 
challenge icon

Thử thách

Dễ

Các bảng và cột có sẵn:

  • air_conditioners: id, efficiency, strength, month

So sánh hiệu suất của từng máy điều hòa với máy điều hòa trước đó.

Viết một truy vấn (query) hiển thị hiệu suất của từng máy điều hòa cùng với hiệu suất của máy điều hòa được lắp đặt trước đó (dựa trên id). Đồng thời, tính độ chênh lệch hiệu suất giữa máy điều hòa hiện tại và máy trước đó. Sắp xếp kết quả theo id và efficiency theo thứ tự tăng dần.

Các cột đầu ra dự kiến:

  • id
  • efficiency
  • previous_efficiency (dùng LAG)
  • efficiency_difference (hiệu suất hiện tại - hiệu suất trước đó)

Cuối cùng, bọc truy vấn và lọc bỏ hàng đầu tiên, vì previous_efficiency (và do đó cả efficiency_difference) không có giá trị, tức là NULL:

SELECT * FROM (
    -- Your query here
)
WHERE previous_efficiency IS NOT NULL

Tự làm thử

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Playground SQL