SQL计数每天保持查询不按预期工作

时间:2012-03-29 09:56:53

标签: php sql

我们假设我管理医疗病人住院信息系统。

我希望每天得到患者数量,并采用以下最小结构:

  • stay表格包含beginend日期时间列
  • 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查询都是微不足道的。

使用临时(日期?)表显然是一种选择。

2 个答案:

答案 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