我有一个带有唯一ID的SQL表,一个医疗保健遭遇的服务日期,以及这次遭遇是急诊室访问(ed = 1)还是住院(hosp = 1)。
对于每个唯一ID,我想确定从住院时间<= 1个日历日发生的ED就诊。
因此,我想我想要SQL首先识别ED就诊,然后上下搜索以找到最近的入院时间并计算日期差异(绝对值)。我熟悉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),它是每次ED访问和最近住院之间的最小绝对日期差异(天数),如下所示:
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,我想确定从住院时间<= 1个日历日发生的ED就诊。
你的输出表并没有真正给你 - 它包括没有匹配的医院许可的ED访问行,并且有医院许可的行等。这个SQL不会给你那些,它只是给你ED访问随后医院在一天内入院。
它也没有给你带负面天数的比赛 - 在ED就诊之前进行医院就诊的情况(就医疗保健分析而言,这通常与寻找ED访问,然后是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
使用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