所以我已经阅读了有关检索添加到表格中的最后一个条目的帖子,但我无法让它为我工作,因为我的查询稍微复杂一些。 我使用SQL服务器,而且我是SQL查询的初学者。
我需要列出某个诊所和最后一次咨询的患者名单。为此我有三张桌子:
这是我到目前为止所得到的:
SELECT p.DebtorNumber
,p.ContactDetails_LastName
,c.Startdate
,c.ConsultNumber
FROM Patients.patients as p
JOIN consults.patients as pc on p.id=pc.Patient_Id
JOIN consults.Consults as c on pc.Parent_Id=c.id
WHERE p.HealthCare_Id=90
我使用常规JOINS因为我只对有咨询的患者感兴趣。该查询检索实践id 90中患者的所有咨询,但我只需要最近的一个。
由于我已经阅读了有关此问题的其他帖子,我知道我应该使用子查询和TOP 1.但在其他示例中,他们从顶层1中取出的表与主表直接相关。
我想我需要添加到我的WHERE,但这肯定不起作用:
and c.id in (select top 1 c.id where pc.Patient_Id=p.id order by start DESC)
我如何才能获得每位患者的最后一次咨询?这将是咨询最高Consults.Consults.Startdate。
先谢谢你们,我已经在这里了解过。
答案 0 :(得分:0)
使用ROW_NUMBER。 EG
with q as
(
SELECT p.DebtorNumber
,p.ContactDetails_LastName
,c.Startdate
,c.ConsultNumber
,row_number() over (partition by p.id order p c.start desc) rn
FROM Patients.patients as p
JOIN consults.patients as pc on p.id=pc.Patient_Id
JOIN consults.Consults as c on pc.Parent_Id=c.id
WHERE p.HealthCare_Id=90
)
SELECT p.DebtorNumber
,p.ContactDetails_LastName
,c.Startdate
,c.ConsultNumber
FROM q
where rn = 1;
答案 1 :(得分:0)
您可以使用以下查询:
SELECT top (1) with ties
p.DebtorNumber
,p.ContactDetails_LastName
,c.Startdate
,c.ConsultNumber
FROM Patients.patients as p
JOIN consults.patients as pc on p.id=pc.Patient_Id
JOIN consults.Consults as c on pc.Parent_Id=c.id
WHERE p.HealthCare_Id=90
Order by row_number() over (partition by p.id order by c.start desc)