Window function tính toán dựa trên một nhóm dòng liên quan nhưng không gộp các dòng lại như GROUP BY — bạn vẫn giữ từng dòng và có thêm cột tính toán. Hợp với xếp hạng, cộng dồn (running total), trung bình trượt, khử trùng lặp, hay so dòng hiện tại với dòng trước.
Ví dụ lấy đơn mới nhất của mỗi user (đánh số trong từng nhóm rồi giữ số 1):
sql
SELECT * FROM (
SELECT orders.*, row_number() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn
FROM orders
) t
WHERE rn = 1;Nó thường giúp tránh query N+1 hoặc phải xử lý xếp hạng thủ công ở tầng app.