我的要求如下, 客户端可以有多个引用,每个引用都有一个Servicestartdateid和ServiceEnddateid。目标是根据以下条件使用ServicestartDateId填充CaseopenedDateID,(1)如果有持续的持续服务,则选择最早的servicestartdate并填充caseopenedDateID,(2)如果服务中断,则选择最早的重新打开日期并填充caseopeneddateid 这应该是方案1结果集如何看起来像
SourceSystemClientID ReferralID ServiceStartDateID ServiceEndDateID CaseOpenedDateID
8901 R43 20080401 20100628 20080401
8901 R54 20080627 20090212 20080401
8901 R66 20090210 20121116 20080401
这应该是方案2结果集如何看起来像
SourceSystemClientID ReferralID ServiceStartDateID ServiceEndDateID CaseOpenedDateID
12334 R78 20080401 20100628 20080401
12334 R88 20080627 20090212 20080401
12334 R98 20090210 20121116 20080401
12334 R102 20140901 20141201 20140901
12334 R107 20141001 20141217 20140901
答案 0 :(得分:1)
我已更新我的查询以考虑您的更新:
Select y.SourceSystemClientID,
y.ServiceStartDateID,
y.ServiceEndDateID,
Res = (select top 1 y2.ServiceStartDateID
from yourtable y1
inner join yourtable y2
ON y1.SourceSystemClientID = y2.SourceSystemClientID
AND y1.ServiceStartDateID <= y2.ServiceEndDateID
where y.SourceSystemClientID = y1.SourceSystemClientID
AND y.ServiceEndDateID = y1.ServiceEndDateID
order by y2.ServiceStartDateID )
from yourtable y
以下是您可以用来测试查询的fiddle
答案 1 :(得分:0)
这应该适合你:
;WITH Q2
AS (
SELECT t.SourceSystemClientID
,t.ServiceStartDateID
,t.ServiceEndDateID
,CASE
WHEN t.ServiceStartDateID <= LAG(t.ServiceEndDateID) OVER (
PARTITION BY t.SourceSystemClientID ORDER BY t.ServiceStartDateID
)
THEN 0
ELSE t.ServiceStartDateID
END CaseOpenedDateID
FROM your_table t --replace this with your tablename
)
SELECT q2.SourceSystemClientID
,q2.ServiceStartDateID
,q2.ServiceEndDateID
,max(q2.CaseOpenedDateID) OVER (
PARTITION BY q2.SourceSystemClientID ORDER BY q2.ServiceStartDateID
) as CaseOpenedDateID
FROM q2
GROUP BY q2.SourceSystemClientID
,q2.ServiceStartDateID
,q2.ServiceEndDateID
,q2.CaseOpenedDateID