cari

Rumah  >  Soal Jawab  >  teks badan

Tajuk yang ditulis semula ialah: Mendapatkan semula rekod dalam kenaikan 30 hari

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粉633309801P粉633309801242 hari yang lalu369

membalas semua(2)saya akan balas

  • P粉860370921

    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;

    balas
    0
  • P粉186904731

    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.

    balas
    0
  • Batalbalas