Sql server sql在第一个表中日期之后的最早日期联接2个表
我的请求与此处描述的请求类似: 一个不同之处是,我需要在第一个表中找到出院日期之后的最早门诊就诊日期,该日期在出院日期后的30天内。如果在时间范围内没有后续访问,我想返回空值 表1“出院”-包含以下列:ClientId、DischargeFrom、出院日期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
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;