加入状态历史记录

时间:2013-02-28 18:37:08

标签: sql

我有一张表,列出了遇到的病人日。下面是一次遭遇的样本。患者每天都在医院,每天午夜就会产生一条记录,直至出院。

Enc_iD  Day_Id      ServiceDtTm        AdmitDate
2616350 34707672    2/21/2013 23:59    21/FEB/13 12:19:00
2616350 34733898    2/22/2013 23:59    21/FEB/13 12:19:00
2616350 34748155    2/23/2013 23:59    21/FEB/13 12:19:00
2616350 34760403    2/24/2013 23:59    21/FEB/13 12:19:00
2616350 34784357    2/25/2013 23:59    21/FEB/13 12:19:00
2616350 34808228    2/26/2013 23:59    21/FEB/13 12:19:00
2616350 34814512    2/27/2013 10:10    21/FEB/13 12:19:00

在单独的表格中,每次遭遇的状态均由用户保持不规则。

Enc_iD  TransDtTm       Status
2616350 2/21/2013 12:20 
2616350 2/21/2013 13:29 1
2616350 2/22/2013 7:28  3
2616350 2/25/2013 13:44 2
2616350 2/27/2013 10:10 2

我想用SQL创建一个结果集,如下所示。因此,对于顶级表格中的每一天,ServiceDtTm的最新状态。

Enc_iD  Day_Id      DtTime             AdmitDate            Status
2616350 34707672    2/21/2013 23:59    21/FEB/13 12:19:00   1
2616350 34733898    2/22/2013 23:59    21/FEB/13 12:19:00   3
2616350 34748155    2/23/2013 23:59    21/FEB/13 12:19:00   3
2616350 34760403    2/24/2013 23:59    21/FEB/13 12:19:00   3
2616350 34784357    2/25/2013 23:59    21/FEB/13 12:19:00   2
2616350 34808228    2/26/2013 23:59    21/FEB/13 12:19:00   2
2616350 34814512    2/27/2013 10:10    21/FEB/13 12:19:00   2

感谢任何帮助。无法想出这个SQL。只有在excel中才能使用近似匹配的vlookup。

Robbert

1 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案是相关子查询。以下是SQL Server中的语法:

select pd.*,
       (select top  1  status
        from status s 
        where s.enc_id = pd.enc_id and s.transdttm <= pd.servicedttm
        order by s.transdttm
       ) as MostRecentStatus
from patientdays pd

对于大多数其他数据库,它看起来像:

select pd.*,
       (select status
        from status s 
        where s.enc_id = pd.enc_id and s.transdttm <= pd.servicedttm
        order by s.transdttm
        limit 1
       ) as MostRecentStatus
from patientdays pd