我们假设我管理医疗病人住院信息系统。
我希望每天得到患者数量,并采用以下最小结构:
stay
表格包含begin
和end
日期时间列$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查询都是微不足道的。
使用临时(日期?)表显然是一种选择。
答案 0 :(得分:1)
Google快速引导我访问此页面:What is the most straightforward way to pad empty dates in sql results (on either mysql or perl end)?
我建议您遵循该问题中的建议,或者在PHP中构建自己的循环。
答案 1 :(得分: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