我已经搜索过,但是没有找到任何能够帮助我解决这个问题的内容。任何帮助都会很棒。
尝试在SQL中回答此问题:
创建Follow_Up:
应在第7天的任何时间对患者进行标记(例如,在2015年2月6日凌晨2点前往急诊室就诊的患者,在2015年2月13日进行门诊随访即使5PM间隔超过168小时,也应将其标记为在7天内进行门诊。
下面是一些样例数据和到目前为止的代码。我认为这也应该是一个子查询。请注意,下面的数据示例是我要查找的与其他代码不同的表,这就是为什么我认为需要子查询的原因。
注意:门诊记录将没有Hosp_admit_dt
。 Hosp_admit_dt
将没有约会签入。另外,请注意,行可以按任何顺序排列。没有给定的偏移量。每个PAT_KEY
的记录数都是随机的。到目前为止,答案似乎需要特定的偏移量。我不确定我是否会创建一个。
非常感谢您的帮助。
示例:查看以下内容:
患者83842766
的访问8216694
是医院承认的。 11/10/2014 16:45
的出院日期。在访问83883100
的{{1}}时再次接纳了该患者。由于这是不到7天的时间,因此在访问11/13/2014 14:42
行中,该患者的1
列中会有一个Follow_Up
。
83842766
样本数据:
SELECT
[PAT_KEY]
, [VISIT_KEY]
, [HOSP_ADMIT_DT]
, (SELECT --NOT SURE HOW THIS CAN BE DONE) AS 'FOLLOW_UP'
FROM [ESa611337].dbo.[visit$]
WHERE [HOSP_ADMIT_DT] <> 'NA'
GO
答案 0 :(得分:2)
如果您的SQL Server版本是2012及更高版本,则可以尝试使用LEAD函数,如下所示
Select
[PAT_KEY]
, [VISIT_KEY]
, [HOSP_ADMIT_DT]
, CASE
WHEN DATEDIFF(d,HOSP_DISCHRG_DT, FollowUpDate) <= 7 THEN 1 -- You may modify this if you want difference by hours
ELSE 0
End as FOLLOW_UP
from (SELECT
*,
LEAD(SalesQuota, 1,0) OVER (PARTITION BY PAT_KEY ORDER BY VISIT_KEY) AS FollowUpDate -- This will create a new column by getting the value from next row,
--assuming that VISIT_KEY is always have higher value compare to previous visit
FROM [ESa611337].dbo.[visit$]
) query
WHERE [HOSP_ADMIT_DT] <> 'NA'
答案 1 :(得分:0)
使用lag
从上一行中获取值(基于所需的顺序),并使用带有条件的case
表达式来设置标志。 (运行内部查询,看看如何将以前的值添加到当前行。)
select distinct pat_key,
case when appt_checkin_dt is not null
and hosp_admit_dt='NA'
and prev_dischrg_dt<>'NA'
and datediff(day,prev_contact_dt,cast(appt_checkin_dt as date))<=7
then 1
else 0
end as follow_up
from (SELECT t.*
,lag(contact_dt_key) over(partition by pat_key order by contact_dt_key) as prev_contact_dt
,lag(hosp_dischrg_dt) over(partition by pat_key order by contact_dt_key) as prev_dischrg_dt
FROM [ESa611337].dbo.[visit$] t
) t
该解决方案假定您使用的是SQL Sever 2012版或更高版本,并且能够使用lag
窗口函数。
答案 2 :(得分:0)
克里斯,如果可以的话,我想提供帮助,但是在我进一步介绍之前,我想确保我对您的需求的理解清楚。
根据您提供的数据创建环境:
-- create table variable --
DECLARE @visits TABLE (
[VISIT_KEY] INT, [PAT_KEY] INT, [DEPT_KEY] INT, [CONTACT_DT_KEY] INT, [APPT_CHECKIN_DT] DATETIME, [HOSP_ADMIT_DT] DATETIME, [HOSP_DISCHRG_DT] DATETIME
);
-- insert data --
INSERT INTO @visits (
[VISIT_KEY], [PAT_KEY], [DEPT_KEY], [CONTACT_DT_KEY], [APPT_CHECKIN_DT], [HOSP_ADMIT_DT], [HOSP_DISCHRG_DT]
)
VALUES
( 85383519, 8208755, 5153, 20150204, '2/4/15 9:03 AM', NULL, NULL )
, ( 85394064, 8208755, 4655, 20150205, NULL, '2/5/15 11:32 AM', '2/8/15 7:09 PM' )
, ( 85482578, 8208755, 4931, 20150213, '2/13/15 2:41 PM', NULL, NULL )
, ( 85687769, 8208755, 4690, 20150325, '3/25/15 1:25 PM', NULL, NULL )
, ( 85706446, 8208755, 4804, 20150325, '3/25/15 1:23 PM', NULL, NULL )
, ( 84492982, 8211959, 4780, 20141221, NULL, '12/21/14 7:22 PM', '12/21/14 9:15 PM' )
, ( 81006886, 8215742, 4923, 20140611, '6/11/14 3:56 PM', NULL, NULL )
, ( 83502242, 8216600, 4777, 20141016, '10/16/14 1:15 PM', NULL, NULL )
, ( 81239904, 8216694, 4995, 20140531, '5/31/14 2:19 PM', NULL, NULL )
, ( 81825248, 8216694, 4655, 20140616, NULL, '6/16/14 9:19 AM', '6/19/14 12:48 PM' )
, ( 81854416, 8216694, 4995, 20141008, '10/8/14 8:59 AM', NULL, NULL )
, ( 83842766, 8216694, 8111, 20141107, NULL, '11/7/14 3:15 AM', '11/10/14 4:45 PM' )
, ( 83883100, 8216694, 4777, 20141113, '11/13/14 2:42 PM ', NULL, NULL )
, ( 85747526, 8216694, 4716, 20150227, NULL, '2/27/15 8:23 AM', '2/28/15 3:04 PM' )
, ( 81342608, 8217928, 4780, 20140514, NULL, '5/14/14 4:07 AM', '5/14/14 5:36 AM' )
, ( 81385263, 8217928, 4780, 20140516, NULL, '5/16/14 2:04 PM', '5/16/14 5:35 PM' )
, ( 82517665, 8218267, 4777, 20140808, '8/8/14 2:36 PM', NULL, NULL )
, ( 81239905, 8220393, 4653, 20140511, '5/11/14 3:44 PM', NULL, NULL )
, ( 86144271, 8223186, 4780, 20150326, NULL, '3/26/15 4:19 PM', '3/26/15 6:28 PM' )
, ( 83012245, 8223203, 4780, 20140914, NULL, '9/14/14 3:38 PM', '9/14/14 8:22 PM' )
, ( 85174511, 8224572, 11611, 20150122, '1/22/15 12:44 PM', NULL, NULL )
, ( 83279874, 8225752, 4780, 20141002, NULL, '10/2/14 9:59 PM', '10/3/14 2:33 AM' )
, ( 84456795, 8227359, 4777, 20141219, '12/19/14 9:05 AM', NULL, NULL )
, ( 85727889, 8227359, 4998, 20150227, NULL, '2/27/15 1:15 PM', '2/28/15 6:40 PM' )
, ( 86017880, 8227509, 5061, 20150319, '3/19/15 2:48 PM', NULL, NULL )
, ( 82909082, 8230810, 11611, 20140912, '9/12/14 8:23 AM', NULL, NULL );
接下来,尝试破译/查询您需要的内容:
医院承认患者8216694的访问次数为83842766。放电 日期为11/10/2014 16:45。该患者在再次就诊时再次入院 83883100,2014年11月13日14:42。由于这是不到7天,因此 在该患者的Follow_Up列中为1。我们只能看到 病人编号为1次。
更新查询
SELECT
ROW_NUMBER() OVER ( PARTITION BY v.PAT_KEY ORDER BY v.PAT_KEY, v.CONTACT_DT_KEY, v.APPT_CHECKIN_DT ) AS VisitRow
, v.PAT_KEY
, v.VISIT_KEY
, v.CONTACT_DT_KEY
, v.APPT_CHECKIN_DT
, v.HOSP_ADMIT_DT
, v.HOSP_DISCHRG_DT
, LAG( v.HOSP_DISCHRG_DT, 1, NULL ) OVER ( PARTITION BY v.PAT_KEY ORDER BY v.PAT_KEY, v.CONTACT_DT_KEY, v.APPT_CHECKIN_DT ) LastDischarged
, DATEDIFF (
dd
, LAG( v.HOSP_DISCHRG_DT, 1, NULL ) OVER ( PARTITION BY v.PAT_KEY ORDER BY v.PAT_KEY, v.CONTACT_DT_KEY, v.APPT_CHECKIN_DT )
, v.APPT_CHECKIN_DT
) AS DaysFromDischarge
FROM @visits v
WHERE
v.PAT_KEY = 8216694
ORDER BY
v.PAT_KEY, v.CONTACT_DT_KEY, v.APPT_CHECKIN_DT;
更新后的结果
+----------+---------+-----------+----------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------+
| VisitRow | PAT_KEY | VISIT_KEY | CONTACT_DT_KEY | APPT_CHECKIN_DT | HOSP_ADMIT_DT | HOSP_DISCHRG_DT | LastDischarged | DaysFromDischarge |
+----------+---------+-----------+----------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------+
| 1 | 8216694 | 81239904 | 20140531 | 2014-05-31 14:19:00.000 | NULL | NULL | NULL | NULL |
| 2 | 8216694 | 81825248 | 20140616 | NULL | 2014-06-16 09:19:00.000 | 2014-06-19 12:48:00.000 | NULL | NULL |
| 3 | 8216694 | 81854416 | 20141008 | 2014-10-08 08:59:00.000 | NULL | NULL | 2014-06-19 12:48:00.000 | 111 |
| 4 | 8216694 | 83842766 | 20141107 | NULL | 2014-11-07 03:15:00.000 | 2014-11-10 16:45:00.000 | NULL | NULL |
| 5 | 8216694 | 83883100 | 20141113 | 2014-11-13 14:42:00.000 | NULL | NULL | 2014-11-10 16:45:00.000 | 3 |
| 6 | 8216694 | 85747526 | 20150227 | NULL | 2015-02-27 08:23:00.000 | 2015-02-28 15:04:00.000 | NULL | NULL |
+----------+---------+-----------+----------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------+
我保留了该行的所有行以供检查,并添加了VisitRow以帮助识别行。我认为很重要的是第3行和第5行。
我还调整了ORDER BY子句以使用CONTACT_DT_KEY代替VISIT_KEY。
问题:
以下是在患者8208755连续多次签入且没有立即出院的情况下使用CROSS APPLY的示例。 CROSS APPLY只是在寻找患者的最后出院日期。
-- patient 8208755 using CROSS APPLY --
SELECT
ROW_NUMBER() OVER ( PARTITION BY v.PAT_KEY ORDER BY v.PAT_KEY, v.CONTACT_DT_KEY, v.APPT_CHECKIN_DT ) AS VisitRow
, v.PAT_KEY
, v.VISIT_KEY
, v.CONTACT_DT_KEY
, v.APPT_CHECKIN_DT
, v.HOSP_ADMIT_DT
, v.HOSP_DISCHRG_DT
, dc.LastDischarged
, DATEDIFF (
dd
, dc.LastDischarged
, v.APPT_CHECKIN_DT
) AS DaysFromDischarge
FROM @visits v
CROSS APPLY (
SELECT MAX( HOSP_DISCHRG_DT ) AS LastDischarged FROM @visits x
WHERE
x.PAT_KEY = v.PAT_KEY -- current patient record
AND x.HOSP_DISCHRG_DT < v.APPT_CHECKIN_DT -- a discharge date prior to check-in
) AS dc
WHERE v.PAT_KEY = 8208755
ORDER BY
v.PAT_KEY, v.CONTACT_DT_KEY, v.APPT_CHECKIN_DT;
交叉应用患者8208755(所有行)的结果:
+----------+---------+-----------+----------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------+
| VisitRow | PAT_KEY | VISIT_KEY | CONTACT_DT_KEY | APPT_CHECKIN_DT | HOSP_ADMIT_DT | HOSP_DISCHRG_DT | LastDischarged | DaysFromDischarge |
+----------+---------+-----------+----------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------+
| 1 | 8208755 | 85383519 | 20150204 | 2015-02-04 09:03:00.000 | NULL | NULL | NULL | NULL |
| 2 | 8208755 | 85394064 | 20150205 | NULL | 2015-02-05 11:32:00.000 | 2015-02-08 19:09:00.000 | NULL | NULL |
| 3 | 8208755 | 85482578 | 20150213 | 2015-02-13 14:41:00.000 | NULL | NULL | 2015-02-08 19:09:00.000 | 5 |
| 4 | 8208755 | 85706446 | 20150325 | 2015-03-25 13:23:00.000 | NULL | NULL | 2015-02-08 19:09:00.000 | 45 |
| 5 | 8208755 | 85687769 | 20150325 | 2015-03-25 13:25:00.000 | NULL | NULL | 2015-02-08 19:09:00.000 | 45 |
+----------+---------+-----------+----------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------+
此查询回溯患者的最早出院日期,然后返回该日期。在这种情况下: 2015-02-08 19:09:00.000 。