"Pertanyaan SQL untuk rekod yang sah dalam julat tarikh tertentu"
P粉884667022
2023-08-31 13:58:14
<p>Saya sedang mengusahakan kawalan kehadiran. Daftar masuk dan daftar keluar ialah dua rekod berbeza dalam jadual</strong></p>
<p>Ada kemungkinan seseorang tidak melog keluar selama beberapa hari, tetapi ia harus dikira sebagai kehadiran pada hari tersebut</p>
<pre class="brush:php;toolbar:false;">ID Personel - Masa daftar masuk - Masa daftar keluar
3842 17/12/2022 09:030 -- Tidak pernah mendaftar keluar (setiap hari selepas 17/12.2022 perlu dikira)
3843 17/12/2022 08:00 -- 17/12/2022 09:30 (Berikut adalah hari yang sama)
3843 17/12/2022 11:00 -- 17/12/2022 13:30 (Di atas adalah hari yang sama)
3841 17/12/2022 08:00 -- 17/12/2022 17:45 (Ringkas hari yang sama)
3844 17/12/2022 22:00 -- 18/12/2022 6:40 (Melintasi tengah malam - 17/12 dan 18/12 perlu dikira)
Hasil yang saya idamkan ialah
12/15 1 orang
12/17 4 orang
12/18 2 orang</pra>
<p>Saya ingin tahu berapa ramai orang yang hadir pada hari X</p>
<p>Saya agak keliru cara mengendalikan dua rekod berbeza (daftar masuk dan daftar keluar) atau hanya satu rekod tersedia (daftar masuk)</p>
<pre class="brush:php;toolbar:false;">BUAT JADUAL `my_history` (
`id` int(11) BUKAN NULL AUTO_INCREMENT,
`id_orang` int(11) LALAI NULL,
`tindakan` varchar(24) LALAI NULL,
cap waktu `apabila_dibuat` NULL CURRENT_TIMESTAMP NULL,
KUNCI UTAMA (`id`)
) ENJIN=InnoDB AUTO_INCREMENT=1 CARSET lalai=utf8;</pre>
<p>Beberapa penyata sisip</p>
<pre class="brush:php;toolbar:false;">MASUKKAN KE DALAM `my_history` ( `person_id`, `action`, `when_created`)
NILAI
(3842, 'mendaftar_masuk', '2022-12-15 08:00:00'),
(3842, 'mendaftar_keluar', '2022-12-15 09:30:00'),
(3842, 'mendaftar_masuk', '2022-12-17 09:30:00'),
(3843, 'mendaftar_masuk', '2022-12-17 08:00:00'),
(3843, 'mendaftar_keluar', '2022-12-17 09:30:00'),
(3843, 'mendaftar_masuk', '2022-12-17 11:00:00'),
(3843, 'mendaftar_keluar', '2022-12-17 13:30:00'),
(3841, 'mendaftar_masuk', '2022-12-17 08:00:00'),
(3841, 'mendaftar_keluar', '2022-12-17 17:42:00'),
(3844, 'mendaftar_masuk', '2022-12-17 22:00:00'),
(3844, 'mendaftar_keluar', '2022-12-18 06:40:00');
CIPTA MEJA orang (
idINT(11)
)
MASUKKAN KE DALAM
orang
NILAI
(3841),
(3842),
(3843),
(3844)</pre></p>
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
Untuk menyelesaikan situasi di mana tarikh daftar keluar boleh kosong dan masih "OK", kami hanya menggantikan nilai kosong dengan nilai yang memenuhi syarat.
Jawapan lama telah dipadamkan kerana perubahan keperluan. Dalam tergesa-gesa, tidak ada masa untuk menjelaskan.
https://dbfiddle.uk/RXx0x9xt