我基本上需要在2个表(CarePlan和Referrals)上做一个左外部联接问题,因为我需要最新的Referral(如果存在),如果没有,则可以。
我有这两个查询
1.联接CarePlan / Referral表-如果一个护理计划有多个推荐,或者根本没有推荐信息,则创建重复的护理计划(左外部联接)
2.在给定CarePlanId的情况下,根据日期选择排名前1的推荐人
我想将这2个结合起来,以便我掌握所有的护理计划及其推荐(如果有的话),如果有的话-仅接受最新的推荐
select * from CarePlan c //query 1
left outer join Referral r on
r.CarePlanId = c.CarePlanId
select top 1 * from Referral r //query 2
where r.CarePlanId = '1'
order by ReferralDate desc
编辑:
第一个查询给我这样的东西:
CarePlanID ReferralId ReferralDate
---------- ---------- ------------
1 1 05/15/12
2 NULL NULL
1 2 05/10/12 //Old date, dont want this careplan
第二个查询将给我推荐的最新日期
ReferralId ReferralDate
---------- ------------
1 05/15/12
推荐数据,可能有0个或多个属于Careplan的推荐
ReferralID CarePlanId Date
---------- ---------- ----
1 1 05/15/12
2 1 05/10/12
最终,我需要一个查询,该查询可以为我提供带有最新日期的推荐的护理计划;如果没有推荐,则为null
像这样:
CarePlanId ReferralId ReferralDate
---------- ---------- ------------
1 1 05/15/12
2 NULL NULL
谢谢-我希望这有意义
最佳答案
select *
from CarePlan c
outer apply (
select top 1 * --top N rows
from Referral r
where r.CarePlanId = c.CarePlanId --join condition
order by /*fill this in!*/
) x
请注意,由于2014年之前(包括2014年)的优化器弱点,这会强制执行循环联接。
关于sql - SQL Server:使用TOP 1的LEFT OUTER JOIN最多选择一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9592875/