Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez les chambres disponibles entre deux dates

Il est difficile de vous donner une réponse complète ici, car vous ne nous montrez que le tableau qui contient les réservations - nous ne pouvons pas savoir quelle gamme de chambres est disponible.

SQL qui renvoie les room_id pour les chambres qui sont réservées pour au moins une partie de la période sélectionnée pourrait être :

SELECT `room_id` , COUNT(*)
FROM `bookings`
WHERE `dt` BETWEEN "[start date]" AND "[end date]"
GROUP BY `room_id`;

Si vous aviez un tableau des chambres (plutôt que des réservations), il vous serait possible de renvoyer une liste de toutes les chambres non réservées pendant cette période avec :

SELECT `id`
FROM `rooms`
WHERE `id` NOT IN (
  SELECT DISTINCT( `room_id` )
  FROM `bookings`
  WHERE `dt` BETWEEN "[start date]" AND "[end date]"
);

AMENDEMENT

Sur la base des commentaires d'OP, les hypothèses sont désormais :

  • Le tableau contient les détails des chambres qui sont disponibles pour une période commençant à la date dans la colonne dt et se terminant le jour suivant (c'est-à-dire les chambres d'hôtel)
  • La requête doit renvoyer toutes les chambres disponibles pour l'intégralité de la période saisie (ainsi, seules les chambres disponibles du JOUR A au JOUR B seront renvoyées.

En tant que tel, le code modifié est :

SELECT room_id
FROM available_rooms
WHERE dt BETWEEN "[start date]" AND DATE_SUB("[end date]",INTERVAL 1 DAY)
GROUP BY room_id
HAVING COUNT(*)=ABS(DATEDIFF("[start date]","[end date]"));