Tajuk yang ditulis semula ialah: Mendapatkan semula rekod dalam kenaikan 30 hari
P粉633309801
P粉633309801 2024-03-29 22:31:21
0
2
329

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粉633309801
P粉633309801

membalas semua(2)
P粉860370921

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粉186904731

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!