如何显示表的最后数据条目没有直接关系

时间:2017-06-10 22:18:09

标签: sql-server

所以我已经阅读了有关检索添加到表格中的最后一个条目的帖子,但我无法让它为我工作,因为我的查询稍微复杂一些。 我使用SQL服务器,而且我是SQL查询的初学者。

我需要列出某个诊所和最后一次咨询的患者名单。为此我有三张桌子:

  • 患者。患者(患者数据,也包含练习ID)
  • Consults.consults(不包含患者数据!)
  • Consults.Patients(链接咨询是患者ID)

这是我到目前为止所得到的:

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。

先谢谢你们,我已经在这里了解过。

2 个答案:

答案 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)