对于SQL中的初学者,我有一个非常简单的问题。我在我的数据库中定义了3个表:“DOCTOR”,“PATIENTS”,“VISITS”。为了简单起见,我在这些表格中只有一对多关系:一位医生有很多病人,但病人只能看到一位医生,一位病人可以多次访问...在我的表中“访问”我有一个字段“时间戳”,知道最后一次访问的时间。
我想在MySQL上做一个“视图”,我会为每位医生提供最新的访问病人,而且只有最近的病人。假设每位医生每天看10名病人,我只想让每位医生看到最后一位拜访他的人。
我该怎么做这样的观点?
感谢您的帮助
编辑1
=>感谢您的回答!
我终于选择了一种更现实的方法,让“病人”看到很多“医生” 因此,我的表“VISITS”将如下所示:
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访问(2,3,4,5,6)而不是1,因为患者向医生1支付的最后一次访问是在20:10而不是14:10。我怎么能这样做?
再一次,我非常感谢你的评论和你的帮助。在我开始使用SQL时,它确实有助于我改进设计。
答案 0 :(得分:3)
我们使用Visits表通过按患者ID分组并选择MAX(visitTime)来查找每位患者的最新访问。然后,我们通过患者表将患者与他/她的医生联系起来。
SELECT doctorID, patientID, lastVisit FROM
Patients INNER JOIN (
SELECT patientID, MAX(visitTime) AS lastVisit FROM Visits
GROUP by patientID) latestVisits
ON lastVisits.patentID = Patients.patentID
编辑:我重新阅读了这个问题,这不会给你你想要的东西。因为它会列出重复的医生ID,显示所有患者的最新访问。
要获得每位医生的最新访问,
SELECT doctorID, latestVisit, (SELECT p.doctorID, MAX(v.lastVisit) latestVisit
FROM Visits v INNER JOIN Patients p ON
v.patientID = p.patientID
GROUP BY p.doctorID) base INNER JOIN
(SELECT doctorID, patientID, lastVisit FROM
Visits v INNER JOIN Patients p ON
v.patientID = p.patientID) patientVisits ON
patientVisits.doctorID = base.doctorID AND patientVisits.lastVisit=base.lastVisit
鉴于两名患者无法同时看到同一位医生,每位医生都不会有超过一排的风险。
答案 1 :(得分:0)
这是一个SQL问题,如果你给出你的表模式,我们可以给你实际正确的sql
我愿意
选择Doctor,max(访问) 来自医生内部加入患者xxx内联合vistits yyy
这为您提供了医生和最后一次访问 - 加入此访问以获得耐心,完成工作
答案 2 :(得分:0)
以下是@ mdma查询的修改版本,可以执行我认为您想要的内容:
SELECT doctorID, Patients.patientID, lastVisit FROM
Patients INNER JOIN (
SELECT patientID, MAX(time) AS lastVisit FROM Visits
GROUP by doctorID) latestVisits
ON latestVisits.patientID = Patients.patientID
以下是我假设您的架构的样子:
Doctors: doctorID
Patients: patientID, doctorID
Visits: doctorID, patientID, time