Sql 根据字段中的值组合选择最新记录
查询目标: 我试图选择总共80条记录(20个州-每个州4条记录)。每个州大约有20000条记录。理想情况下,我只想为活动类型和生产者类型代码的4种组合中的每一种选择最新的(使用ACTIVITY_TSP)记录 前 表1:Sql 根据字段中的值组合选择最新记录,sql,db2,greatest-n-per-group,Sql,Db2,Greatest N Per Group,查询目标: 我试图选择总共80条记录(20个州-每个州4条记录)。每个州大约有20000条记录。理想情况下,我只想为活动类型和生产者类型代码的4种组合中的每一种选择最新的(使用ACTIVITY_TSP)记录 前 表1: AGENT_KEY STATE ACTIVITY_TYPE ... ACTIVITY_TSP 表2: AGENT_KEY PRODUCER_TYPE_CD A加入与分组依据 select STATE, ACTIVITY_TYPE, PRODUCER_TYPE_CD, MAX(
AGENT_KEY
STATE
ACTIVITY_TYPE
...
ACTIVITY_TSP
表2:
AGENT_KEY
PRODUCER_TYPE_CD
A
加入与分组依据
select STATE, ACTIVITY_TYPE, PRODUCER_TYPE_CD, MAX(ACTIVITY_TSP)
from table1 t1
join table2 t2 on t1.AGENT_KEY = t2.AGENT_KEY
group by STATE, ACTIVITY_TYPE, PRODUCER_TYPE_CD
或者您想要所有的table1和table2列
select *
from table1 t1
join table2 t2 on t1.AGENT_KEY = t2.AGENT_KEY
where not exists (select 1 from table1 t1b
where t1b.STATE = t1.STATE
and t1b.ACTIVITY_TYPE = t1.ACTIVITY_TYPE
and t1b.PRODUCER_TYPE_CD = t1.PRODUCER_TYPE_CD
and t1b.ACTIVITY_TSP > t1.ACTIVITY_TSP)
使用行编号()
:
可能重复给定示例的预期结果?抱歉,该示例是20个州中1个州的预期结果。
select *
from table1 t1
join table2 t2 on t1.AGENT_KEY = t2.AGENT_KEY
where not exists (select 1 from table1 t1b
where t1b.STATE = t1.STATE
and t1b.ACTIVITY_TYPE = t1.ACTIVITY_TYPE
and t1b.PRODUCER_TYPE_CD = t1.PRODUCER_TYPE_CD
and t1b.ACTIVITY_TSP > t1.ACTIVITY_TSP)
select t.*
from (select t1.*, t2.producer_type_cd,
row_number() over (partition by t1.state, t1.activity_type, t2.PRODUCER_TYPE_CD
order by t1.ACTIVITY_TSP desc) as seqnum
from table1 t1 join
table2 t2
on t1.agent_key = t2.agent_key
) t
where seqnum = 1;