在 SQL Server 中查找与条件匹配的最近行



我有一个SQL表,其中包含唯一的ID,医疗保健就诊的服务日期,以及这次就诊是急诊室就诊(ed = 1(还是住院(hosp = 1(。

对于每个唯一 ID,我想确定住院后 <= 1 个日历日发生的急诊就诊。

因此,我想让SQL首先识别急诊就诊,然后上下搜索以找到最近的住院人数并计算日期差异(绝对值(。我熟悉 lag/lead 和 rownumber(( 函数,但似乎无法弄清楚这一点。

任何想法将不胜感激!谢谢!

对于一个说明性 ID,表如下所示:

id     date          ed  hosp       
1      2012-01-01    0   1      
1      2012-01-05    1   0
1      2012-02-01    0   1 
1      2012-02-03    1   0  
1      2012-05-01    0   0

我想创建一个新列 (ed_hosp_diff(,它是每次急诊就诊和最近住院之间的最小绝对日期差(天(,如下所示:

id     date          ed  hosp  ed_hosp_diff     
1      2012-01-01    0   1     null 
1      2012-01-05    1   0     4
1      2012-02-01    0   1     null
1      2012-02-03    1   0     2
1      2012-05-01    0   0     null

因此,这不会为您提供显示的输出表,但它满足了您列出的要求:

对于每个唯一 ID,我想识别发生的 ED 访问<= 1 住院的日历日。

您的输出表并没有真正为您提供这一点 - 它包括没有匹配医院入院的急诊就诊行,以及住院等行。 这个SQL不会给你这些,它只是给你急诊就诊,然后在一天内住院。

它也不会为您提供负天数的匹配 - 医院访问是在急诊就诊之前的情况(就医疗保健分析而言,这通常与寻找急诊就诊后进行 IP 承认是两回事(。如果确实需要这些,请删除主查询的 WHERE 子句中的最后一位逻辑。

SELECT
    ID              =   e.id,
    ED_DATE         =   e.date,
    HOSP_DATE       =   h.date
    ED_HOSP_DIFF    =   DATEDIFF(dd, e.date, h.date)    
FROM 
    Table1 AS e
JOIN
    (
    SELECT
        id,
        date
    FROM
        Table1
    WHERE
        hosp = 1
    ) AS h
ON
    e.id = h.id
WHERE
    e.ed = 1
AND
    DATEDIFF(dd, e.date, h.date) <= 1
AND 
    DATEDIFF(dd, e.date, h.date) >= 0
<</div> div class="one_answers">

使用 OUTER APPLY 获取 ed = 1 的记录并找到最小日期差异

SELECT *
FROM  table t
      OUTER APPLY
      (
          SELECT ed_hosp_diff = MIN ( ABS ( DATEDIFF(DAY, t.date, x.date) ) )
          FROM   table x
          WHERE  x.date <> t.date
          AND    x.ed = 1
      ) eh

相关内容

  • 没有找到相关文章

最新更新