DB2 从审计中获取最新的修改值和以前的值 table
DB2 Get latest modified and previous value from audit table
我有一个审核 table,我正在尝试获取具有审核时间戳信息的列(等级)的当前值和先前值。我想在值更改时获取时间戳。例如:
对于 id = 1
,userid = 2
在 13-05-2021 14:10
上最近更改了排名 from 3 to 5
。
我在下面写了查询,它给出了当前和以前的修改值,但它给出了 latest date
和用户 ID(17-05-2021 20:00
和 2
),因为 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也可以为null,那样的话我需要在查询结果中获取空白。
预期输出:
您似乎想要 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;
我有一个审核 table,我正在尝试获取具有审核时间戳信息的列(等级)的当前值和先前值。我想在值更改时获取时间戳。例如:
对于 id = 1
,userid = 2
在 13-05-2021 14:10
上最近更改了排名 from 3 to 5
。
我在下面写了查询,它给出了当前和以前的修改值,但它给出了 latest date
和用户 ID(17-05-2021 20:00
和 2
),因为 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也可以为null,那样的话我需要在查询结果中获取空白。
预期输出:
您似乎想要 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;