【发布时间】: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: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 也可以为空,这种情况下我需要在查询结果中获取空白。
预期输出:
【问题讨论】:
-
编辑您的问题并显示您想要的结果。
-
添加了预期的输出