Skip to content
Advertisement

MySQL get latest 7 days reservations, grouped by NameResource

I’m tring to write a query, without a good resultset.
I would to retreive a Number of reservations in last 7 days.
Grouped by NameOfResource.
When i’m tring to set a WHERE clause like this prenotazioni.Data >= CURDATE() - INTERVAL 7 DAY
I get only NameOfResource with reservations in latest 7 days, but not the rooms without reservations.

My Query was like that: (without WHERE the result is good)

SELECT count(*) as NReservationsFromWeek,Nomeroom FROM reservations
INNER JOIN room ON reservations.FKRoom = room.IDRoom
WHERE reservations.Data >= CURDATE() - INTERVAL 7 DAY
group by room.IDRoom

Thank you to explain me where I was wrong.

Advertisement

Answer

You can use a LEFT JOIN, if you want all rooms, even those with a count of 0:

SELECT ro.IDRoom, ro.Nomeroom, COUNT(re.FKRoom) as NReservationsFromWeek,
FROM room ro LEFT JOIN
     reservations re 
     ON re.FKRoom = ro.IDRoom AND
        re.Data >= CURDATE() - INTERVAL 7 DAY
GROUP BY ro.IDRoom, ro.Nomeroom;  -- Both unaggregated keys should be in the GROUP BY
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement