0

我有一张表格,列出了遇到的患者天数。下面是一次相遇的样本。患者在医院的每一天,都会在午夜创建一个记录,直到出院。

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。

罗伯特

4

1 回答 1

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
于 2013-02-28T18:42:43.343 回答