Maison > Questions et réponses > le corps du texte
P粉2538003122023-09-01 09:56:28
En général, pour tester cette situation, vous devez voir si la date qui vous intéresse est supérieure à la date d'arrivée et inférieure à la date de départ. Par exemple
WHERE checkin <= '2022-12-14' and checkout >= '2022-12-14'
Pour résoudre la situation où la date de départ peut être vide et toujours "OK", nous remplaçons simplement la valeur vide par une valeur qui remplit la condition.
SELECT * FROM my_history WHERE checkin <= '2022-12-14' and COALESCE(checkout,'2022-12-14') >= '2022-12-14'
P粉3176793422023-09-01 09:17:04
L'ancienne réponse a été supprimée en raison d'un changement d'exigence. Dans la précipitation, je n’ai pas eu le temps de m’expliquer.
SELECT param.check_date, COUNT(DISTINCT p.id) FROM ( SELECT timestamp '2022-12-15 00:00' AS check_date UNION ALL SELECT timestamp '2022-12-17 00:00' AS check_date UNION ALL SELECT timestamp '2022-12-18 00:00' AS check_date ) AS param CROSS JOIN person AS p INNER JOIN my_history AS h ON h.person_id = p.id AND h.when_created >= COALESCE( ( SELECT when_created FROM my_history WHERE person_id = p.id AND when_created <= check_date ORDER BY when_created DESC LIMIT 1 ), check_date ) AND h.when_created < check_date + INTERVAL 1 DAY AND h.action = 'checked_in' GROUP BY param.check_date