我想在2015年提取最新实验室值的列表。所有实验室值都存储在一个表中,我需要将数据限制在2015年以内并将其限制为某些类型的实验室,因此最大日期不会给我最新的实验室,无论其类型如何。虽然我使用IN子句,但包括其他类型的实验。
我需要最后一个值,无论它们具有什么类型的实验室,只要它在IN子句中标识的类型内(即我不需要每种类型的最后一个值)
select distinct
t2.pat_id
,t2.pat_last_name "PatientLast"
,t2.pat_first_name "PatFirst"
,t2.birth_date
,t1.contact_date "ContactDate"
,t3.name "EncounterType"
,t4.ord_num_value "Numeric Value"
,t4.result_date
from table1 t1
inner join table2 t2 on t1.pat_id = t2.pat_id
inner join table3 t3 on t1.enc_type_c = t3.disp_enc_type_c
inner join table4 t4 on t1.pat_enc_csn_id = t4.pat_enc_csn_id
inner join
(
select
table1.pat_id
,max(table1.contact_date) as LastResult
,table4.component_id
from table1
**inner join order_results on table1.pat_enc_csn_id = table4.pat_enc_csn_id
where table4.component_id in ('1526664','1558024','1004','2667', '1230000002','1564041')
and table1.contact_date between '2015-01-01' and '2015-12-31'
group by table1.pat_id, table4.component_id
) enc2** on table1.pat_id = enc2.pat_id
and table1.contact_date = enc2.LastResult
order by table2.pat_last_name, table2.pat_first_name
答案 0 :(得分:0)
您的查询有点难以理解。但一种方法是使用row_number()
。像这样:
select t.*
from (select . . .,
row_number() over (partition by pat_id order by contact_date desc) as seqnum
from . . .
where . . .
) t
where seqnum = 1;
子查询中有where
条件不在外部查询中,因此很难遵循预期的逻辑。使用row_number()
比子查询简单得多,因为您不必重复任何逻辑。