Rumah > Soal Jawab > teks badan
Saya mempunyai pertanyaan berikut untuk mendapatkan temujanji yang perlu diingatkan sebulan sekali (jika belum selesai). Saya ingin mendapatkan rekod untuk 30, 60, 90, 120 dan lain-lain yang lalu dari tarikh semasa.
SELECT a.* FROM appointments a WHERE DATEDIFF(CURDATE(), a.appointment_date) % 30 = 0
Adakah cara lain untuk mencapai ini tanpa menggunakan DATEDIFF? Saya mahu meningkatkan prestasi pertanyaan ini.
P粉8603709212024-03-30 15:08:42
Anda boleh menggunakan pertanyaan berikut untuk membandingkan tarikh temu janji dengan tarikh hari ini.
Kami juga menguji sama ada ia adalah hari terakhir bulan untuk membuat temujanji pada akhir bulan. Contohnya, jika kami berada pada 28 Februari (bukan tahun lompat), kami akan menerima tarikh untuk bulan tersebut >= 28
, iaitu 29, 30 dan 31, yang sebaliknya akan terlepas.
Kaedah ini mengalami masalah yang sama seperti sistem semasa anda, iaitu janji temu hujung minggu akan terlepas.
select a.* from appointements a, (select day(now()) today, case when day(now())= last_day(now()) then day(now()) else 99 end lastDay ) days where d = today or d >= lastDay;
P粉1869047312024-03-30 11:36:18
Baiklah, mari kita ketepikan tarikh dan perbezaan tarikh buat masa ini. Dari perspektif soalan ini, orang itu cuba mencari semua pelantikan pada masa lalu dan tidak semestinya pelantikan lain pada masa hadapan. Sebagai contoh, buat temu janji susulan dengan doktor anda untuk "kembali dalam sebulan dan lihat sama ada keadaan telah berubah." Ini membuatkan saya berfikir bahawa mungkin terdapat beberapa ID pesakit dalam borang janji temu. Jadi itu mungkin mengalihkan soalan kepada melihat ke belakang 30, 60 atau 90 hari yang lalu untuk melihat sama ada terdapat janji temu yang dijadualkan untuk masa depan. Pesakit tidak memerlukan peringatan telefon untuk datang ke pejabat jika mereka sudah mempunyai temu janji.
Begitu juga, saya akan bermula dengan cara yang berbeza dan mengambil semua pesakit yang telah membuat temu janji dalam tempoh 90 hari yang lalu dan melihat sama ada mereka telah (atau belum) membuat temujanji susulan pada jadual susulan - bergerak ke atas. Dengan cara ini, kakitangan pejabat boleh menghubungi pesakit tersebut untuk diletakkan pada kalendar.
Mulakan dengan mendapatkan semua volum temu janji maksimum untuk mana-mana pesakit tertentu sepanjang 90 hari yang lalu. Jika seseorang membuat janji temu 90 hari lalu dan membuat susulan 59 hari lalu, mereka mungkin hanya mengambil berat tentang janji temu terbaharu untuk memastikan ada susulan.
select a1.patient_id, max( a1.appointment_date ) MostRecentApnt from appointments a1 WHERE a1.appointment_date > date_sub( a1.appointment_date, interval 90 day ) group by a1.patient_id
Sekarang, bermula dari senarai tetap ini dan tarikh mula, apa yang kami pentingkan ialah berapa hari sehingga tarikh semasa adalah tarikh terakhir. Adakah hari X? Hanya gunakan datediff dan susun. Anda boleh melihat secara visual berapa hari yang ada. Dengan cuba membahagikannya kepada baldi 30 hari, 60 hari atau 90 hari, hanya mengetahui berapa hari sejak janji temu terakhir mungkin semudah mengisih dalam tertib menurun, memanggil janji temu yang paling lama dahulu, bukannya yang baru sahaja berlaku. Malah mungkin untuk memotong senarai panggilan selepas 20 hari dan masih tidak mempunyai janji temu dan hampir dengan 30 hari yang dijangkakan.
SELECT p.LastName, p.FirstName, p.Phone, Last90.Patient_ID, Last90.MostRecentApnt, DATEDIFF(CURDATE(), Last90.appointment_date) LastAppointmentDays FROM ( select a1.patient_id, max( a1.appointment_date ) MostRecentApnt from appointments a1 WHERE a1.appointment_date > date_sub( a1.appointment_date, interval 90 day ) group by a1.patient_id ) Last90 -- Guessing you might want patient data to do phone calling JOIN Patients p on Last90.Patient_id = p.patient_id order by Last90.MostRecentApnt DESC, p.LastName, p.FirstName
Kadangkala hanya memberikan jawapan kepada soalan langsung tidak memenuhi tujuan yang betul. Semoga saya boleh lebih tepat dengan keperluan hasil akhir yang diinginkan. Sekali lagi, perkara di atas bermakna menyertai borang pesakit untuk panggilan susulan untuk menjadualkan temujanji.