Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sql在第一个表中日期之后的最早日期联接2个表_Sql Server_Date_Join - Fatal编程技术网

Sql server sql在第一个表中日期之后的最早日期联接2个表

Sql server sql在第一个表中日期之后的最早日期联接2个表,sql-server,date,join,Sql Server,Date,Join,我的请求与此处描述的请求类似: 一个不同之处是,我需要在第一个表中找到出院日期之后的最早门诊就诊日期,该日期在出院日期后的30天内。如果在时间范围内没有后续访问,我想返回空值 表1“出院”-包含以下列:ClientId、DischargeFrom、出院日期 ClientId DischargeFrom DischargeDate 1 Unit A 2009/11/08 1 Unit A 2010/01/05 2 Unit A 2010/01/08 3 Unit B

我的请求与此处描述的请求类似:

一个不同之处是,我需要在第一个表中找到出院日期之后的最早门诊就诊日期,该日期在出院日期后的30天内。如果在时间范围内没有后续访问,我想返回空值

表1“出院”-包含以下列:ClientId、DischargeFrom、出院日期

ClientId    DischargeFrom   DischargeDate
1   Unit A  2009/11/08
1   Unit A  2010/01/05
2   Unit A  2010/01/08
3   Unit B  2010/10/01
4   Unit A  2010/02/04
4   Unit B  2010/04/05
5   Unit A  2010/01/04
表2“门诊就诊-包含以下列:ClientId、FollowUpClinicName、FollowUpVisitDt

ClientId    FollowUpClinicName  FollowUpVisitDt
1   Outpatient_Clinic_1 2009/05/04
1   Outpatient_Clinic_1 2009/07/07
1   Outpatient_Clinic_1 2010/01/14
1   Outpatient_Clinic_1 2010/01/18
2   Outpatient_Clinic_2 2007/11/05
2   Outpatient_Clinic_3 2009/12/22
2   Outpatient_Clinic_1 2010/01/04
5   Outpatient_Clinic_2 2010/01/01
5   Outpatient_Clinic_1 2010/01/11
7   Outpatient_Clinic_3 2010/01/25
一个ClientId可以有多个出院(这里是ClientId 1和4),一个ClientId也可以与多个随访(ClientId 1、2和5)关联。我希望在出院日期当天或之后,但在出院日期后30天内返回第一次随访。我还想返回那些没有随访的出院记录

我尝试了以下语法,但我似乎无法返回最早的就诊记录(请参见ClientId 1在同一出院日期有2个重复结果)。此外,第2位病人已出院,但未列入结果

SELECT DISTINCT Discharges.ClientId,
    Discharges.DischargeFrom, 
    Discharges.DischargeDate,
    FollowUpVisits.FollowUpVisitDate,
    DateDiff(DAY,Discharges.DischargeDate,FollowUpVisits.FollowUpVisitDate) As DaysBetween,
    FollowUpVisits.rn
 FROM Discharges LEFT JOIN
 (
 SELECT *, ROW_NUMBER() OVER (PARTITION By ClientId, FollowUpClinicName ORDER BY FollowUpVisitDate ASC) as rn
    FROM [MH].[dbo].OutpatientVisits
 ) As FollowUpVisits
 ON Discharges.ClientId=FollowUpVisits.ClientId
 WHERE (FollowUpVisits.FollowUpVisitDate>=Discharges.DischargeDate and FollowUpVisitDate<=DATEADD(day,30,DischargeDate)) OR FollowUpVisits.FollowUpVisitDate Is Null

非常感谢你的帮助!我使用的是MSSQL 2005。

尝试使用
外部应用
实现以下目的:

select d.*, fv.*,
       datediff(day, d.DischargeDt, ov.FollowupVisitDt) as DaysBetween
from Discharges d outer apply
     (select top 1 ov.*
      from [MH].[dbo].OutpatientVisits ov
      where ov.ClientId = d.ClientId and
            ov.FollowupVisitDt > d.DischargeDt
      order by FollowupVisitDt
     ) fv;
select d.*, fv.*,
       datediff(day, d.DischargeDt, ov.FollowupVisitDt) as DaysBetween
from Discharges d outer apply
     (select top 1 ov.*
      from [MH].[dbo].OutpatientVisits ov
      where ov.ClientId = d.ClientId and
            ov.FollowupVisitDt > d.DischargeDt
      order by FollowupVisitDt
     ) fv;