J'ai un système de réservation, mais je veux maintenant calculer ce que l'occupation d'une pièce dans un mois est.
Mais je rencontre des difficultés avec des résultats précis, car si une date de début des réservations est à F.e. 28 décembre et se termine le 3 janvier, il comptera ou 6 jours ou pas du tout en fonction de la requête. P>
Il devrait compter seulement 3 jours que seuls 3 des 6 jours de la réservation sont en décembre p>
4 Réponses :
Pour cette requête, vous pouvez utiliser moins () code> et plus grand () code> pour ajuster les limites du mois: SELECT
room_id,
SUM(DATEDIFF(
LEAST('2020-01-01 00:00:00', end_time),
GREATEST('2019-12-01 00:00:00', start_time)
) as days
FROM reservations
WHERE
start_time >= '2019-12-01 00:00:00'
AND end_time < '2020-01-01 00:00:00'
GROUP BY room_id
Votre condition dans le où la clause code> est fausse car elle rejetera les réservations où start_date code> et end_date code> ne sont pas tous les deux le même mois: < Pré> xxx pré> p>
En fait, je viens de courir ces requêtes, mais cela semble être des réserves qui ont des dates de début de 1 mois dans l'autre ne sont toujours pas résumées
Publier des données d'échantillonnage et des résultats attendus au format texte à tester.
Salut forpas échantillons de données et résultats attendus ainsi que ce que j'ai merci de m'avoir aidé à partir du fait
Pour Room_id = 4 Pourquoi vous attendez-vous à 7? Vous devriez attendre 3.
Oh ouais j'ai changé des dattes en start_date = 2019-11-01 00:00:00 End_date = 2019-12-01 00:00:00 Pour aller avec cette exemple de données, mais j'ai oublié de le mentionner désolé
Alors maintenant, mon résultat est comme celui-ci avant, mais +1 Résultat
Vérifiez ceci: db-fiddle.com/f/cqj7iqead2zgfzvdgram7/1
Et en novembre? Ensuite, il renvoie ce https://www.db-fiddle.com/f/fpuk2as9bkfirj76ahucwq/ 0
Il n'y a pas de 31 novembre: db-fiddle.com/f/fpuk2as9bkfirj76ahucwq/1<< a>
Hahahaha mon dieu, merci beaucoup des forpas. agissons comme je n'avais jamais fait cette erreur
Je ne suis pas sûr que si les dernières et dernières dates sont comptées, mais la logique est quelque chose comme ceci:
SELECT room_id,
SUM(DATEDIFF(LEAST(end_time + interval 1 day, '2020-01-01'),
GREATEST(start_time, '2019-12-01')
)
) as days
FROM reservations
WHERE start_time < '2020-01-01' AND
end_time >= '2019-12-01'
GROUP BY room_id;
pouvez-vous essayer ce
pouvez-vous essayer cela.