我有一个Patient
遵循多个Phase
s 定义的过程。当患者处于某个阶段时,会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
的 所以这也不见了。
问题
也许我完全走错了路,我根本不需要子查询。我认为问题很清楚:如何根据给定阶段的列表选择患者?