在下表中,哪个脚本每个CARE_ID返回一行,其EVENT_TYPE为CP,它位于TR的第一个实例之前。否则返回最新的CP实例。优先级比较器为EVENT_DATE,并列断路器为MAX(EVENT_ID) 以下是预期的决赛桌。
CARE_ID EVENT_ID EVENT_DATE EVENT_TYPE
3 117 09/04/2010 00:00 CP
3 104 11/04/2010 00:00 TR
3 190 16/04/2010 00:00 TR
3 16 12/07/2010 00:00 TR
3 17 13/07/2010 00:00 TR
3 18 13/07/2010 00:00 TR
78 11 27/07/2009 00:00 TR
78 9 28/07/2009 00:00 TR
78 706 08/12/2010 00:00 CP
78 707 09/12/2010 00:00 CP
107 93 23/02/2010 00:00 CP
107 1474 21/09/2012 00:00 TR
206 84 28/07/2009 00:00 CP
206 85 21/08/2009 00:00 CP
CARE_ID EVENT_ID EVENT_DATE EVENT_TYPE
3 117 09/04/2010 00:00 CP
78 707 09/12/2010 00:00 CP
107 93 23/02/2010 00:00 CP
206 85 21/08/2009 00:00 CP
答案 0 :(得分:1)
这种类型的查询应该是可行的。以下内容根据您的条件获取最长活动日期:
select t.care_id,
coalesce(max(case when event_date < tr.mined then event_date end),
max(event_date)
) as thedate
from table t left outer join
(select care_id, min(event_date) mined
from table t
where event_type = 'TR'
group by care_id
) tr
on tr.care_id = t.care_id
where t.event_type = 'CP'
group by t.care_id;
然后,您可以加入原始表格以获取其余信息:
select t.*
from table t join
(select t.care_id,
coalesce(max(case when event_date < tr.mined then event_date end),
max(event_date)
) as thedate
from table t left outer join
(select care_id, min(event_date) mined
from table t
where event_type = 'TR'
group by care_id
) tr
on tr.care_id = t.care_id
where t.event_type = 'CP'
group by t.care_id
) tt
on tt.care_id = t.care_id and tt.thedate = t.event_date and tt.event_type = 'CP';