gpt4 book ai didi

sql - 有关 SQL 查询的帮助

转载 作者:太空狗 更新时间:2023-10-30 01:55:44 24 4
gpt4 key购买 nike

在之前的帖子中,我正在做一个非常简单的数据库,其中包含 3 个表“医生”、“患者”和“访问”。我试图让它更现实,现在包括“医生”和“病人”之间的多对多关系。 “访问”是导致此 n-m 关系的表。我假设我的表具有以下简单结构:

doctor- idDoctor- namepatient-idPatient-name-dobvisit-idVisit-idPatient-idDoctor-timestamp

我正在使用以下数据进行查询:

idVisit  idDoctor  idPatient  timestamp1        1         1          2010-07-19 14:102        1         2          2010-07-19 15:103        2         1          2010-07-19 15:104        3         1          2010-07-19 16:105        2         2          2010-07-19 18:106        2         3          2010-07-19 19:107        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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com