如何在db2中最后一次更改字段值之前检索它?

问题描述 投票:0回答:1

我有一个包含国家代码,状态,changestatusdate的表。

我想获取每个国家代码的最后状态和seconf的最后状态,但是我有问题:

对于某些国家代码,changestatusdate已修改并获得新值,但是状态未修改,因此我们不能使用changestatusdate显示状态修改。

例如,我们有此数据:

national code     status     changestatusdate
123                 1            20150101
123                 2            20150301
123                 2            20150315
123                 3            20150601
123                 1            20151201
123                 5            20160101
123                 5            20160301

我们需要最后一个状态(5)和第二个最后一个状态(1)。...我们如何检索这些数据?

sql db2 data-retrieval
1个回答
0
投票

我提出以下方法:

  • 过滤数据,使相邻行中没有重复的状态。
  • 枚举行,以使最后一个状态为“ 1”,最后一个状态为“ 2”,依此类推。
  • 使用条件聚合。

在查询中,它看起来像:

select t.national_code,
       max(case when seqnum = 1 then status end) as last_status,
       max(case when seqnum = 2 then status end) as last_status_but_one
from (select t.*,
             row_number() over (partition by national_code order changestatusdate desc) as seqnum
      from (select t.*,
                   lag(status) over (partition by national_code order by changestatusdate) as prev_status
            from t
           ) t
      where prev_status is null or prev_status <> status
     ) t
where seqnum <= 2
group by national_code;
© www.soinside.com 2019 - 2024. All rights reserved.