【问题标题】:DB2 Get latest modified and previous value from audit tableDB2 从审计表中获取最新的修改值和以前的值
【发布时间】:2021-08-06 23:59:08
【问题描述】:

我有一个审计表,我正在尝试获取包含审计时间戳信息的列(排名)的当前值和先前值。我想获取值更改时的时间戳。例如:

对于id = 1,排名最近由userid = 2 更改为from 3 to 5 上的13-05-2021 14:10。 我在下面写了查询,它给出了当前和以前的修改值,但它给出了 latest date 和用户 ID(17-05-2021 20:002),因为 row_number 是按时间戳排序的。

with v_rank as (    
    select * from (
        select
            id,
            a.rank as current_rank,
            b.rank as previous_rank,
            a.log_timestamp,
            a.log_username,
            row_number() over(partition by a.id order by a.log_timestamp) as rnum
        from
            user a
            inner join user b on a.id = b.id and a.log_timestamp > b.timestamp
            where
                a.rank != b.rank
            order by a.log_timestamp, b.timestamp
    ) where rnum = 1
)
select * from v_rank

关于如何获得正确的timestamp(13-05-2021 14:10)userid(2) 的任何建议。 编辑: Rank 也可以为空,这种情况下我需要在查询结果中获取空白。

预期输出:

【问题讨论】:

  • 编辑您的问题并显示您想要的结果。
  • 添加了预期的输出

标签: sql database db2


【解决方案1】:

你似乎想要 lag() 过滤:

select u.*
from (select u.*,
             lag(rank) over (partition by id order by log_timestamp) as prev_rank
      from user u
     ) u
where rank <> prev_rank;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2015-07-05
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多