【问题标题】:Select the most current record per combination of values in fields根据字段中的值组合选择最新记录
【发布时间】:2015-08-26 20:43:57
【问题描述】:

查询目标: 我正在尝试选择总共 80 条记录(20 个州 - 每个州 4 条记录)。每个州都有约 20000 条记录。理想情况下,我只想为活动类型和生产者类型代码的 4 种组合中的每一种选择最新的(使用 ACTIVITY_TSP)记录。

例如

STATE| ACTIVITY_TYPE | PRODUCER_TYPE_CD | ...
-------------------------------------------------------
MI   |     1         |  '01'            | ...
MI   |     1         |  '02'            | ...
MI   |     2         |  '01'            | ...
MI   |     2         |  '02'            | ...

表 1:

AGENT_KEY
STATE
ACTIVITY_TYPE
...
ACTIVITY_TSP

表 2:

AGENT_KEY
PRODUCER_TYPE_CD

【问题讨论】:

标签: sql db2 greatest-n-per-group


【解决方案1】:

JOINGROUP BY?

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)

【讨论】:

    【解决方案2】:

    使用row_number():

    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;
    

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      相关资源
      最近更新 更多