2012-03-29 1 views
0

医療患者が情報システムを管理するとします。SQLカウントは1日に1回のクエリが期待どおりに機能しない

私は、次の最小限の構造で一日あたりの患者数を取得したい:

  • stay表はbeginend日時列
  • を持っているPHPは私に$first_day$last_day限界

います次のスニペットは、1日あたりのエントリ数のみをカウントし、1日あたりの滞在時間をカウントしないため、私が望むものではありません。

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クエリを探しています。

1日ごとに1つの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)あなたがリンクしたスタックスレッドを見つけたはずです。とにかく、ありがとう。 –

+0

もう1つ、私のdatetimesを必要な日付にキャストしていますか?私はそうは思わない。 –

+0

選択中、またはテーブル内にありますか?さらに、ストアドプロシージャを必要としない場合は、2100年までのすべての日付を含むカレンダーテーブルを作成して、その開始/終了を使用することもできます。 – GavinCattell

1

迅速なGoogleが周りにこのページに私をリード:What is the most straightforward way to pad empty dates in sql results (on either mysql or perl end)?

私は何を示唆しているが、あなたがその質問にアドバイスに従うか、PHPで独自のループを構成するどちらかということです。

+0

おかげで、私はPHPのツールを使ってループを好むだろうと思います。ストアドプロシージャの概念があまり好きではありません。 –

関連する問題