Patient
複数ので定義されたプロセスに従うaがありますPhase
。患者がフェーズにあるStatus
とき、特定のタイムスタンプで作成された接続患者とフェーズがあります。
MySQLでは、私のテーブルは次のようになります。
patient:
id (int)
phase:
id (int)
order: (int)
name: (varchar)
status:
patient_id: (int, FK)
phase_id: (int, FK)
timestamp: (datetime)
現在、フェーズA> B> C> Dになっています。現在フェーズBまたはCにあるすべての患者を選択したいと思います。フェーズAのみの患者は除外する必要があり、フェーズDの患者(つまり、BおよびCのステータスを持つ)除外する必要もあります。
私の試練
だから私はこのようなものを最初に選択したいと思います:
SELECT p.*, s.*, ph.*
FROM patient p
LEFT JOIN status s on p.id = s.patient_id
LEFT JOIN phase ph on ph.id = s.phase_id
WHERE s.id IN
(
// sub query
)
ORDER BY s.timestamp
与えられたステータスxのすべての患者を選択することを考えました。ステータスxは、最初は次のようなものです。
SELECT status.*, phase.name
FROM status
LEFT JOIN phase ON phase.id=status.phase_id
WHERE phase.name IN ('B', 'C')
GROUP BY status.patient_id
しかし、私は残りを解決することはできません。明らかに、プロセスのさらなる段階で人々を排除することはありません。max(status.timestamp) as max_timestamp
選択にaを追加すると、status.timestamp
とが表示されmax_timestamp
ます。
このクエリorder
では、フェーズテーブルでを使用していません。最初に注文したかっただけですid
が、プロセスは時間の経過とともに変化する可能性があるため、それは悪い考えだと思いました。だからそれも欠けています。
質問
おそらく私は完全に間違った方向に進んでおり、サブクエリはまったく必要ありません。問題は非常に明確だと思います。与えられたフェーズのリストに基づいて患者を選択するにはどうすればよいですか?