×

Truy vấn giá trị cuối cùng với hàm LAST_VALUE() trong MySQL

Hàm LAST_VALUE() trong MySQL là một công cụ hữu ích để truy vấn giá trị cuối cùng trong một tập hợp các bản ghi. Hàm này thuộc nhóm các hàm cửa sổ (Window Functions), cho phép bạn truy vấn dữ liệu theo nhiều cách khác nhau mà trước đây rất khó hoặc không thể thực hiện được với các hàm tổng hợp thông thường.

Cách sử dụng LAST_VALUE()

Hàm LAST_VALUE() được sử dụng cùng với mệnh đề OVER() để xác định cửa sổ dữ liệu mà nó sẽ áp dụng. Cú pháp cơ bản như sau:

LAST_VALUE(column_name) OVER (
    [PARTITION BY partition_expression]
    ORDER BY sort_expression
    [ROWS or RANGE clause]
)
  • column_name: Tên cột bạn muốn truy vấn giá trị cuối cùng.
  • PARTITION BY: Tùy chọn, giúp phân chia kết quả thành các nhóm nhỏ hơn.
  • ORDER BY: Bắt buộc, xác định thứ tự của các bản ghi trong mỗi phân vùng.
  • ROWS or RANGE clause: Tùy chọn, xác định cửa sổ dữ liệu để tính toán.

Ví dụ minh họa

Giả sử bạn có một bảng dữ liệu sales với các cột id, sale_date, và amount. Bạn muốn truy vấn giá trị doanh số cuối cùng của mỗi ngày trong bảng.

SELECT 
    id,
    sale_date,
    amount,
    LAST_VALUE(amount) OVER (
        PARTITION BY sale_date 
        ORDER BY sale_date, id 
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
    ) AS last_daily_amount
FROM 
    sales;

Trong ví dụ trên, hàm LAST_VALUE() được sử dụng để truy vấn giá trị doanh số cuối cùng của mỗi ngày. Chú ý rằng chúng ta sử dụng PARTITION BY sale_date để phân chia dữ liệu theo ngày và ORDER BY sale_date, id để sắp xếp các bản ghi trong từng phân vùng theo ngày và ID tăng dần. Câu lệnh ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING giúp xác định rằng cửa sổ áp dụng cho toàn bộ các bản ghi trong phân vùng đó.

Các trường hợp sử dụng thực tế

  1. Theo dõi biến động giá: Khi bạn muốn theo dõi giá trị cuối cùng của một sản phẩm trong một khoảng thời gian nhất định.
  2. Báo cáo tài chính: Truy vấn giá trị số dư cuối cùng của các tài khoản ở cuối mỗi kỳ kế toán.
  3. Lịch sử thay đổi dữ liệu: Xác định giá trị cuối cùng của các bản ghi sau khi áp dụng một chuỗi thay đổi.

Các lưu ý quan trọng

  • Hiệu suất: Sử dụng hàm LAST_VALUE() có thể ảnh hưởng đến hiệu suất truy vấn nếu không được dùng cẩn thận, đặc biệt với các bảng dữ liệu lớn. Sắp xếp lại các cột và sử dụng chỉ mục có thể cải thiện hiệu suất.
  • Cửa sổ trượt: Bạn có thể dùng mệnh đề ROWS hoặc RANGE để điều chỉnh cửa sổ trượt, giúp linh hoạt hơn trong các truy vấn.

Kết luận

Hàm LAST_VALUE() trong MySQL là một công cụ mạnh mẽ khi cần truy vấn giá trị cuối cùng trong các phân vùng dữ liệu. Khi biết cách sử dụng và cấu hình đúng, bạn có thể tận dụng hàm này để tạo ra những truy vấn phân tích dữ liệu hiệu quả và chính xác. Điều này đặc biệt hữu ích trong các báo cáo tài chính, theo dõi biến động giá và phân tích lịch sử dữ liệu.

Comments