sql查询,用于在特定值发生更改时检查表中的2条记录

8fq7wneg  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(317)

我有一张表,上面有以下数据:

Date,         Id,      hash,      Timestamp
----          --       ------     ---------
2020-05-21    001      abc123     07:00am
2020-05-21    001      abc123     08:00am
2020-05-21    001      def456     09:00am
2020-05-21    002      dddddd     07:00am
2020-05-21    002      dddddd     08:00am
2020-05-21    002      dddddd     09:00am
2020-05-21    003      222222     07:00am
2020-05-21    003      qqqwww     08:00am
2020-05-21    003      qqqwww     09:00am

我需要一个查询,将检查最新的记录(上午9点的记录),并比较他们与以前的记录插入该id(上午8点的记录),并检查哈希值是否不同。只需要一个列表的上午9点的记录有一个更改的哈希值。提前谢谢!

brqmpdu1

brqmpdu11#

如果数据库支持,则可以使用窗口函数:

select t.*
from (
    select
        t.*,
        row_number() over(partition by id order by timestamp desc) rn,
        lag(hash)    over(partition by id order by timestamp) lag_hash
    from mytable t
) t
where rn = 1 and hash <> lag_hash

这假设 timestamp 列的数据类型类似于日期(或者至少可以使用中的数据类型对记录进行正确排序)。

相关问题