SQL 计数每天停留时间查询未按预期工作


SQL count stays per day query not working as expected

假设我管理医疗患者住院信息系统。

我想使用以下最小结构获得每天的患者计数:

  • 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查询将完全是微不足道的。

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

正如您提到的,使用所需范围内所有日期的临时表是处理此问题的一种方法。如果您创建了一个名为 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中构建自己的循环。