首页 > 解决方案 > 在 T-SQL 中显示单个表中的日期重叠

问题描述

我有以下情节表示例:

请注意,其中 DischDate="2020-02-20" 表示 - 客户尚未出院。这就像NULL(这个日期意味着填写NULL)

在此处输入图像描述

我的目标是在同一个 EHRClientFK 中显示所有可能的重叠,如下所示:

查看我所有可能的重叠的架构: 在此处输入图像描述

因此,在此表的情况下,我希望显示 - EHRClientFK / AdmDate / DischDate 仅适用于 EHRClientFK = 2、4、3、5(满足架构):

这应该是结果表: 在此处输入图像描述

EHRClientFK 值 8、9、10 没有重复(重叠),客户端 6、7 有两个 adm-disch 日期,但它们之间没有重叠。彼此

为了达到这个结果,我有以下代码:

     SELECT 
           a.[EHRClientFK]
          ,a.[AdmDate]
          ,a.[DischDate]

    FROM [WH].[dbo].[Episode] a
    INNER JOIN [WH].[dbo].[Episode] b ON a.EHRClientFK = b.EHRClientFK 

    WHERE
         ((a.DischDate = '2020-02-20') AND (b.DischDate = '2020-02-20'))
      OR ((a.AdmDate < b.DischDate) AND (b.AdmDate < a.DischDate))


   GROUP BY
           a.[EHRClientFK]
          ,a.[AdmDate]
          ,a.[DischDate]

   HAVING COUNT (*) >1

但是,当我在我的原始表(超过 2 万条记录)上应用它时 - 我仍然有不重复的 EHRClientFK,比如 8、9、10(非常微不足道,但仍然如此);和一些没有重叠日期的 6,7 案例

我应该如何更改我的Where子句以满足我的重叠模式(以涵盖所有重叠情况)”?

标签: tsqldateduplicatesrangeoverlap

解决方案


推荐阅读