0

我有一个审计表,其中实体按 id 和关联的修订号和修订类型存储(这是一个 Hibernate Envers 审计表)。

例如

ID 转速型 foo_description
10 1 0 10 富 v1
10 3 1 10 富 v2
10 4 1 10 富 v3
20 2 0 20 富 v1
20 4 1 20 富 v2

如何查询此表,以便获得小于指定版本的每个 id 的最新版本,例如 rev=4?

从上面的示例表中,查询小于 rev=4 的最新版本的结果应该是:

ID 转速型 foo_description
10 3 1 10 富 v2
20 2 0 20 富 v1

我正在使用 MySQL 数据库,版本 5.7。

4

1 回答 1

1

在 mysql 8+ 中:

select * from (
   select * , row_number() over (partition by id order by rev desc) rn
   from tablename
   where rev < 4
) t where rn = 1

在 mysql 5.7 中:

select * from mytable t1
where (id,rev) = ( 
     select id, rev from mytable t2
     where t2.rev < 4
     and t1.id = t2.id
     order by rev desc limit 1
     )

db<>在这里摆弄

于 2021-10-15T14:19:58.883 回答