【发布时间】:2020-06-07 20:01:07
【问题描述】:
我的问题与这里描述的问题类似:Check if date falls between previous row start date and end date
但是,在我的数据中,可能有多个事件重叠,我也想返回不重叠的行。数据:
PatientID Facility Encounter # FromDate ToDate
-------------------------------------------------------------
5 A 22 2017/02/14 2017/02/19
5 B 55 2017/02/19 2017/04/15
5 C 66 2017/04/15 2017/08/19
7 A 198 2018/06/27 2018/08/13
8 D 222 2019/07/18 2019/12/06
8 A 2305 2019/12/06 2020/01/07
8 C 2223 2020/03/31 2020/05/17
9 C 12312 2018/01/12 2020/02/04
在上面的示例中,客户 5 和 8 在他们的出院日期(从以前的遭遇)入院。每当入院日期与前一行的出院日期相同时(按时间顺序),我需要将日期加入一次护理(例如,对于患者 5,它是遇到 22,55 和 66;对于患者 8,它是遇到 222、2305)。我还希望输出不是这种情况的情况(患者 ID 7 和 9 并遇到患者 8 的 2223)
期望的输出:
PatientID FromDate ToDate
-----------------------------------
5 2017/02/14 2017/08/19
7 2018/06/27 2018/08/13
8 2019/07/18 2020/01/07
8 2020/03/31 2020/05/17
9 2018/01/12 2020/02/04
我正在使用 SQL Server 2016。非常感谢您的帮助!
【问题讨论】:
-
将来,为 SQL Fiddle 提供已经设置好的表和数据。此外,请提供您迄今为止所做的尝试。
-
好点!对于不包括 SQL Fiddle 或我尝试过的代码,我深表歉意。在发布之前,我尝试过使用类似于下面的 CROSS APPLY,但在接下来的步骤中被卡住了。
SELECT Main.PatientID ,Main.FromDate ,Main.ToDate ,Main.Facility ,Main.[Encounter #] ,a.ToDate ,lag(a.ToDate) OVER (partition by Main.PatientID ORDER BY Main.FromDate) FROM Encounter Main cross APPLY (SELECT TOP 1 ToDate FROM Encounter NextAdm WHERE NextAdm.PatientID=Main.PatientID AND Main.ToDate=NextAdm.FromDate ORDER BY ToDate DESC ) a
标签: sql-server date join