假设我管理医疗患者住院信息系统。
我想使用以下最小结构获得每天的患者计数:
-
stay
表具有begin
和end
日期时间列 - 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查询将完全是微不足道的。
使用临时(日期?(表显然是一种选择。
正如您提到的,使用所需范围内所有日期的临时表是处理此问题的一种方法。如果您创建了一个名为 foo
的日期表,其中包含所有介于 $first_day
和 $last_day
(含(之间的日期(请参阅此处(。
然后,您可以像这样编写查询:
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
快速的谷歌搜索将我带到了这个页面:在sql结果中填充空日期的最直接方法是什么(在mysql或perl端(?
我的建议是,你要么遵循这个问题中的建议,要么在PHP中构建自己的循环。