SQL外部应用不返回我期望的结果

时间:2014-12-19 00:41:18

标签: sql tsql

我不确定如何解决这个问题,我想我应该在这里做一个交叉加入,但我不确定是否有更好的方法。

我有这个破坏的查询,它不会运行,因为第一个子查询返回3个结果而不是一个,但通过阅读它你应该看到我想要完成的任务

select top 1 [weight], dateofvisit from WeeklyVisits where PatientId in
(
select PatientId, StartDate, StartWeight from plans where PatientId in 
(select id from patients where clinicid=11 and id in
(select distinct(patientid) from plans))
) order by dateofvisit desc

我想为每个patientid返回1个结果,一个结果将是最新的dateofvisit。

体重,dateofvisit,patientid,startdate,visitdate

我正在考虑跨外连接,因为子查询不允许我加入这些连接。

所以我至少尝试了一个没有错误运行的交叉外连接,但是它不仅仅显示诊所id 11中的患者,它不显示最后的结果和它显示空日期和重量。什么都没有在这里工作;但SQL对我来说并不是一个非常强大的观点。

select p.startdate, p.StartWeight, p.PatientId, x.DateOfVisit, x.[Weight]
from plans p 
outer apply(
select top 1 [Weight], [DateOfVisit] from WeeklyVisits w 
where p.PatientId=w.PatientId and [weight] is not null and DateOfVisit is not null and p.PatientId in (
select id from patients where clinicid=11 and id in
(select PatientId from plans))
)as x

1 个答案:

答案 0 :(得分:2)

select * from
(   select PatientId, StartDate, StartWeight, dateofvisit,
           row_number() over (partition by PatientId order by dateofvisit desc) as rownum
      from WeeklyVisits  
      join plans 
        on plans.PatientId = WeeklyVisits.PatientId 
      join patients 
        on patients.id = plans.id 
       and clinicid = 11 )
 where rownum = 1