2012-03-29 96 views
0

假設我管理醫療病人停留信息系統。SQL計數每天停留查詢不按預期工作

我想每天的病人數與以下最低結構:

  • stay表已經beginend datetime列
  • PHP給我$first_day$last_day限制

的下面的代碼段不是我想要的,因爲它每天只記錄條目,並且不存在每天停留的記錄:

SELECT 
    DATE_FORMAT(`stay`.`begin`, '%Y-%m-%d') AS `date`, 
    COUNT(`stay`.`stay_id`) AS `total` 
FROM `stay` 
WHERE `stay`.`begin` <= '$first_day' 
    AND `stay`.`end` >= '$last_day' 
GROUP BY `date` 
ORDER BY `date` 

最後但並非最不重要的是,我正在查找完整的SQL查詢。

毫無疑問,爲每一天製作一個SQL查詢將是非常平凡的。

使用臨時(日期?)表格顯然是一種選擇。

回答

1

正如你所提到的使用你想要的範圍內的所有日期的臨時表是處理這個問題的一種方法。如果您創建了名爲foo的日期表,其中所有日期在$first_day$last_day之間(包括here)。

然後,你可以寫你的查詢,如:

SELECT f.date, count(s.stay_id) 
FROM foo f 
JOIN stay s ON s.begin <= f.date AND s.end >= date 
GROUP BY f.date 
ORDER BY f.date 
+0

好吧,我現在覺得有點愚蠢,我應該找到(a)查詢,(b)你鏈接的堆棧線程。無論如何,非常感謝。 – 2012-03-29 12:04:28

+0

還有一件事,是將我的日期時間轉換爲必要的日期?我不這麼認爲。 – 2012-03-29 12:06:34

+0

在選擇,還是在表中?另外,如果你不想存儲程序,你也可以創建一個日曆表,所有日期到2100年,只需加入一個使用你的開始/結束。 – GavinCattell 2012-03-29 16:15:56