Rumah > Soal Jawab > teks badan
P粉2538003122023-09-01 09:56:28
Lazimnya, untuk menguji keadaan ini, anda perlu melihat sama ada tarikh yang anda minati lebih besar daripada tarikh daftar masuk dan kurang daripada tarikh daftar keluar. Contohnya
WHERE checkin <= '2022-12-14' and checkout >= '2022-12-14'
Untuk menyelesaikan situasi di mana tarikh daftar keluar boleh kosong dan masih "OK", kami hanya menggantikan nilai kosong dengan nilai yang memenuhi syarat.
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
Jawapan lama telah dipadamkan kerana perubahan keperluan. Dalam tergesa-gesa, tidak ada masa untuk menjelaskan.
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