假设我管理医疗病人留置信息系统。
我想用以下最小的结构来计算每天的病人数:
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查询是非常简单的。
使用临时(日期?)桌子显然是一种选择。
发布于 2012-03-29 10:44:58
正如您所提到的,在所需范围内使用一个包含所有日期的临时表是处理此问题的一种方法。如果您创建了一个名为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发布于 2012-03-29 10:12:03
一个快速的Google把我带到了这个页面:What is the most straightforward way to pad empty dates in sql results (on either mysql or perl end)?
我建议您要么遵循这个问题中的建议,要么在PHP中构建自己的循环。
https://stackoverflow.com/questions/9923047
复制相似问题