2012-03-29 85 views
0

假设我管理医疗病人停留信息系统。SQL计数每天停留查询不按预期工作

我想每天的病人数与以下最低结构:

  • stay表已经beginend datetime列
  • 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查询将是非常平凡的。

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

回答

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 
+0

好吧,我现在觉得有点愚蠢,我应该找到(a)查询,(b)你链接的堆栈线程。无论如何,非常感谢。 – 2012-03-29 12:04:28

+0

还有一件事,是将我的日期时间转换为必要的日期?我不这么认为。 – 2012-03-29 12:06:34

+0

在选择,还是在表中?另外,如果你不想存储程序,你也可以创建一个日历表,所有日期到2100年,只需加入一个使用你的开始/结束。 – GavinCattell 2012-03-29 16:15:56