我基本上需要在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/

10-10 23:23