The query below gives me top 3 services for 6th June 2021.
x
SELECT products_name AS product,
COUNT(products_name) AS NumberOfBookings
FROM bookings
WHERE date = "06-06-2021"
GROUP BY products_name,
ORDER BY NumberOfBookings DESC
LIMIT 3;
I want to repeat this for each day of June.
How do I do that? I was thinking of iterating over a date range but that is not working. Is there a way to do it with some nested queries or group by?
Advertisement
Answer
You can use window functions with aggregation. Something like this:
SELECT b.*
FROM (SELECT date, products_name AS product,
COUNT(*) AS NumberOfBookings,
ROW_NUMBER() OVER (PARTITION BY date ORDER BY COUNT(*) DESC) as seqnum
FROM bookings
WHERE date >= '2021-06-01' AND date < '2021-07-01'
GROUP BY products_name, date
) b
WHERE seqnum <= 3
ORDER BY Date, seqnum;
Note: This uses standard date formats for the date constants.