2013-02-28 128 views
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与近似匹配。

Robbert

+4

向我们展示你想出第一。这不是oDesk :) – Trent 2013-02-28 18:38:09

回答

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 
+0

戈登,thx做了诡计 – user2120786 2013-02-28 19:41:36

+0

唯一的事情是我不能限制或顶部在我的系统。所以我最终使用子查询,如你所建议的,比基于ID。因此,加入状态,其中pd.enc_id = s.enc_id和s.day_id =(从状态s2中选择max(s.day_id),其中s2.DtTime user2120786 2013-02-28 19:42:45

+0

@ user2120786。 。 。当答案解决了你的问题时,你应该接受它。当你有更多的积分时,你可以随心所欲地答复你的问题(对你的问题或别人的问题)。 – 2013-02-28 19:43:40