重寫的標題為:Retrieving records in increments of 30 days
P粉633309801
P粉633309801 2024-03-29 22:31:21
0
2
330

我有以下查詢來獲取需要每月提醒一次(如果尚未完成)的約會。 我想取得從目前日期起過去 30、60、90、120 等的記錄。

#
SELECT
    a.*
FROM
    appointments a
WHERE
    DATEDIFF(CURDATE(), a.appointment_date) % 30 = 0

是否有另一種方法不使用 DATEDIFF 來實現此目的?我想提高此查詢的效能。

P粉633309801
P粉633309801

全部回覆(2)
P粉860370921

您可以使用以下查詢將約會當月的日期與今天的日期進行比較。
我們也測試是否是該月的最後一天,以便在月底預約。例如,如果我們是 2 月 28 日(不是閏年),我們將接受該月的日期 >= 28,即 29、30 和 31,否則這些日期將被錯過。
此方法與您目前的系統有相同的問題,即會錯過週末的約會。

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

好吧,讓我們暫時把日期和日期差異放在一邊。從這個問題來看,此人正在嘗試尋找過去的所有約會,而將來不一定有另一個約會。例如與醫生進行後續預約「一個月後回來看看情況發生了變化」。這讓我想到預約表中可能有一些患者 ID。因此,這可能會將問題轉向查看過去 30 天、60 天或 90 天前,看看未來是否有相應的約會安排。如果已經預約,患者不需要電話提醒即可進入辦公室。

也就是說,我會以不同的方式開始,讓所有在過去 90 天內進行過預約的患者,看看他們是否已經(或沒有)在後續時間表中進行了後續預約-向上。這樣,辦公室人員就可以與所述患者聯繫以列入日曆。

首先取得過去 90 天內任何給定患者的所有最大預約量。如果某人在 90 天前進行了預約,並在 59 天進行了後續行動,那麼他們可能只關心最近的約會以確保有後續行動。

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

現在,從這個固定的清單和開始日期開始,我們所關心的是,距離目前還有多少天是最後一次約會。是 X 天嗎?只需使用 datediff 並排序即可。您可以直觀地看到有多少天。透過嘗試將它們分成 30 天、60 天或 90 天的桶,只需知道距離上次約會有多少天,可能就像按降序排序一樣簡單,首先調用最舊的約會,而不是剛剛發生的約會。甚至可能在 20 天後切斷通話清單,但仍然沒有預約,並且已經接近預期的 30 天了。

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

有時,僅針對直接問題提供答案並不能滿足正確的需求。希望我能更準確地滿足預期的最終結果需求。同樣,上述內容意味著加入患者表以進行後續呼叫以安排預約。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!