Window functions perform a calculation across a set of table rows that are somehow related to the current row.
Unlike GROUP BY, they don’t collapse rows.
ROW_NUMBER() is a great place to start. It assigns a unique integer to each row within a partition.
Example: Find the most recent login for each user.
SELECT * FROM (
SELECT
UserID,
LoginDate,
ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY LoginDate DESC) as rn
FROM UserLogins
) as subquery
WHERE rn = 1;
This is perfect for ranking, identifying duplicates, or finding the “first” or “last” of something for each customer/product/region without complex self-joins.
What’s the impact? You can now easily identify a customer’s first purchase or their most recent support ticket.
How have you used window functions? Let’s discuss!