0
votes

Comment obtenir une occupation d'un mois?

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.

Il devrait compter seulement 3 jours que seuls 3 des 6 jours de la réservation sont en décembre xxx


0 commentaires

4 Réponses :


2
votes

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


0 commentaires

1
votes

Votre condition dans le où la clause est fausse car elle rejetera les réservations où start_date et end_date ne sont pas tous les deux le même mois: < Pré> xxx


10 commentaires

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



1
votes

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;


0 commentaires

0
votes

pouvez-vous essayer ce xxx


1 commentaires

pouvez-vous essayer cela.