2015-12-18 8 views
5

私たちは、訪問中の体重など、私たちのオフィスへのさまざまな訪問の詳細を示す患者用データベースを用意しています。その訪問の日付と患者の最初の訪問が可能な最大の値であるがX日数を超えない間の差に基づいて訪問(テーブルからの行)を返すレポートを生成したい。MySQL - 列+ Xの列を選択してください

これは混乱するので、例を試してみましょう。私のクエリで

visit_id | created    | patient_id | weight 
---------+---------------------+------------+------- 
     1 | 2006-08-08 09:00:05 |   10 | 180 
     2 | 2006-08-15 09:01:03 |   10 | 178 
     3 | 2006-08-22 09:05:43 |   10 | 177 
     4 | 2006-08-29 08:54:38 |   10 | 176 
     5 | 2006-09-05 08:57:41 |   10 | 174 
     6 | 2006-09-12 09:02:15 |   10 | 173 

、私は「30日」のために、このレポートを実行したいた場合、それはに28日だから、私は、どこvisit_id = 5行を返すようにしたいでしょう:のは、私は次の表は、patient_visitsと呼ばれているとしましょう未来、そして次の行は35日後のものですが、それはあまりにも多くです。

は、私はそのような自体にテーブルを結合し、またはそれに等しいかcreated + 30 days未満であるcreatedの最大値を返すようにしようとするWHERE句でサブクエリを作成するなど、物事の様々なを試してみましたが、私はしましたこの時点では失われているようだ。最後の手段として、すべてのデータをPHP配列にプルしてそこにロジックを構築することができますが、実際はそうではありません。

大きな写真はこれです:このデータベースには、約5000人の患者がおり、それぞれに何回も診察を受けています。私は最初の訪問からX日(すなわち、個々の患者の最初の訪問からのX日、任意のX日の期間ではなく、X日間)に移動したときのすべての患者の平均待機時間がどのようなものであったかを報告するためにレポートを作成したい)。私は上記を解決することができれば、私は休憩を取ることができることを期待しています。

+0

言い換えれば、各patient_idについて*最も早い*訪問(それを* anchor *と呼ぶ)してから、アンカーから最も遠い*アンカーからX日以内の別の訪問を見つける必要があります。他のすべての訪問(アンカーに近いものとX日以上のもの)は破棄する必要があります。右? –

答えて

0

あなたは(これは日付比較のための正しい構文を持っていないことに注意してください、それは、クエリのちょうどスキーマである)このようなクエリを使用して、最初と次の訪問の日付を取得することができます:

select 
    first_visits.patient_id, 
    first_visits.date first_date, 
    max(next_visit.created) next_date 
from (
    select patient_id, min(created) as "date" 
    from patient_visits 
    group by patient_id 
) as first_visits 
inner join patient_visits next_visit 
    on (next_visit.patient_id = first_visits.patient_id 
     and next_visit.created between first_visits.created and first_visits.created + 30 days) 
group by first_visits.patient_id, first_visits.date 

したがって、基本的にグループ化を使用して開始日をpatient_idにしてからpatient_visitsに参加し、30日以内の最大日付を見つける必要があります。

次に、結果をpatient_visitsに結合して、開始および終了重みを取得し、損失を計算することができます。

+0

これは正しい方向に進んでいるようです。私はそれを実行可能なクエリにするために上記のいくつかのことを変更することができました、そして、適切な日付を返します、そして1.02秒で。私はジョインに2つの問題があります。最初はスピードです。実行には64秒かかります。 2つめは、次の訪問にどのように参加するのか分からないということです。テーブル「ON max(next_visit.created)」または「ON next_date」に参加できません。 –

関連する問題