在之前的帖子中,我正在做一个非常简单的数据库,其中包含 3 个表“医生”、“患者”和“访问”。我试图让它更现实,现在包括“医生”和“病人”之间的多对多关系。 “访问”是导致此 n-m 关系的表。我假设我的表具有以下简单结构:
doctor - idDoctor - name patient -idPatient -name -dob visit -idVisit -idPatient -idDoctor -timestamp
我正在使用以下数据进行查询:
idVisit idDoctor idPatient timestamp 1 1 1 2010-07-19 14:10 2 1 2 2010-07-19 15:10 3 2 1 2010-07-19 15:10 4 3 1 2010-07-19 16:10 5 2 2 2010-07-19 18:10 6 2 3 2010-07-19 19:10 7 1 1 2010-07-19 20:10
然后我有 3 个病人和 3 个医生。例如,患者1去看医生1两次,一次医生2一次,一次医生3。
我想建立我的请求,以便我对每对夫妇(医生、病人)进行最后一次访问。此查询应返回 ID Visits (2,3,4,5,6, 7) 而不是 1,因为患者最后一次拜访医生 1 的时间是 20:10 而不是 14:10。我该怎么做?
非常感谢您的评论和帮助。当我开始使用 SQL 时,它确实帮助我改进了我的设计。
最佳答案
假设 id 是按时间顺序分配的,你可以“作弊”
SELECT MAX(idVisit) AS idVisit, idDoctor, idPatient
FROM visit
group by idDoctor, idPatient
如果不能做出那个假设
SELECT v.idVisit, v.idDoctor, v.idPatient
FROM visit v
WHERE NOT EXISTS
(
SELECT * FROM visit v2
WHERE v2.idDoctor = v.idDoctor
AND v.idPatient = v2.idPatient
AND v2.timestamp > V.timestamp
)
或者,如果您的 DBMS 支持,
WITH V AS
(
SELECT idVisit, idDoctor, idPatient,
row_number() over(partition by idDoctor, idPatient order by timestamp desc) AS RN
FROM visit
)
SELECT idVisit, idDoctor, idPatient
FROM V
WHERE RN=1
关于sql - 有关 SQL 查询的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3281854/