查询以选择具有最新打开日期的记录描述

时间:2013-09-23 19:24:30

标签: sql oracle

表格Case_ACTIONS

CASE_ID      SEQ_NUM      DATE_OPEN     DATE_DUE   CODE       DESCREPTION_J
153286253    64125995     9/21/2013     9/28/2013  23001954   有害事象連絡票
153286253    64125996     9/23/2013     9/29/2013  23001938   PMS-SAE/AE報告書

表LM_ACTION_ITEM_TYPE

ACTION_TYPE_ID      ACTION_TYPE 
23001954           JP FU AE Report Frm
23001938           JP FU with pregnancy 

我想选择DESCREPTION_J作为类型'JP FU AE Report Frm'或'JP FU with pregnancy'的最新记录

我写的查询是:

select 
    description_j 
from 
    case_actions 
where  
    date_open = (select MAX(ca.date_open) 
                 from case_actions ca, LM_ACTION_ITEM_TYPE lat 
                 where ca.code = lat.action_type_id 
                   and lat.action_type IN ('JP FU AE Report Frm – Contact Record', 'JP FU AE Report Frm–Detail Invest. Frm','JP FU with pregnancy form') 
                   and ca.case_id = :P_LET_CASE_ID and ca.action_status = 1 
                   and ca.deleted is NULL)

它给了我不正确的数据。请帮忙。

2 个答案:

答案 0 :(得分:1)

您必须将外部查询与内部查询相关联,否则您可能会获得只与日期共享的case_actions(而不是子查询中的其他过滤器)。

使用此示例数据: enter image description here

使用case_id = 153286253,您的查询将提供bbb和ddd。但是ddd有一个不同的case_id和代码,我认为你不想要它。

向内部查询添加和ca.case_id = case_actions.case_id会给出bbb​​,我相信这是你期望的结果。

答案 1 :(得分:0)

首先,您应该始终提供整个表结构定义。 无论如何,根据你的样本查询,我可以想到一些东西。 试试这个。

select ca.description_j 
  from case_actions ca
 where ca.date_open = (select MAX(ca.date_open) 
                      from lm_action_item_type lat 
                     where ca.code = lat.action_type_id 
                       and lat.action_type IN ('JP FU AE Report Frm Contact Record', 'JP FU AE Report Frm Detail Invest. Frm','JP FU with pregnancy form') 
                       and ca.case_id = :P_LET_CASE_ID 
                       and ca.action_status = 1 
                       and ca.deleted is NULL)