Bài học theo mô-đun (4/4)
Thay đổi: LAG và LEAD
Thay đổi: LAG và LEAD
Trong dữ liệu tuần tự và dựa trên thời gian, bạn thường cần so sánh hàng hiện tại với hàng của ngày hôm trước. Trong SQL "tiêu chuẩn", làm như vậy đòi hỏi phải tự tham gia rất nguy hiểm (và rất chậm).
Các hàm LAG() (hàng trước) và LEAD() (hàng tiếp theo) giải quyết chính xác vấn đề này một cách cực kỳ linh hoạt và tinh tế.
Nhìn về quá khứ và tương lai
SELECT
created_at,
total_amount,
LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;Trong ví dụ, mỗi hàng sẽ mang số lượng được tạo ra bởi cùng một bảng một cách thuận tiện, được dịch chuyển về phía trước một hàng (ngược thời gian). Chúng ta có thể dễ dàng trừ total_amount - LAG(...) để tính toán chênh lệch hoặc phần trăm thay đổi hàng tháng!
Tương tự, LEAD() sẽ lấy giá trị từ hàng ngay bên dưới hàng hiện tại.
Từ bảng 'sản phẩm', hãy trích xuất 'id', 'launched_on', 'price' và thêm 'prev_price', tức là 'giá' của sản phẩm được coi là giá trị 'trước đó' một cách hợp lý, theo thứ tự 'launched_on' tăng dần.
Hiển thị gợi ý
Sử dụng LAG(giá) QUÁ(ORDER BY ra mắt_on ASC)
Giải pháp khả dụng sau 3 lần thử
Bạn sẽ tính toán mức tăng xếp hạng cho mỗi người dùng cá nhân như thế nào? Mô phỏng nó: từ bảng 'đánh giá' trích xuất 'customer_id', 'created_at', 'xếp hạng' và 'next_rated' (đánh giá tiếp theo của cùng một khách hàng theo thời gian). Vì vậy, hãy phân vùng theo 'customer_id', sắp xếp theo 'created_at' và sử dụng chức năng cửa sổ bên phải để xem trước.
Hiển thị gợi ý
LEAD() cùng với PARTITION BY và ORDER BY trong OVER.
Giải pháp khả dụng sau 3 lần thử