我有一個審計表,其中物體按 id 和相關的修訂號和修訂型別存盤(這是一個 Hibernate Envers 審計表)。
例如
ID | 轉 | 型別 | foo_description |
---|---|---|---|
10 | 1 | 0 | 10 foo v1 |
10 | 3 | 1 | 10 foo v2 |
10 | 4 | 1 | 10 foo v3 |
20 | 2 | 0 | 20 foo v1 |
20 | 4 | 1 | 20 foo v2 |
如何查詢此表,以便獲得小于指定修訂版的每個 id 的最新修訂版,例如 rev=4?
從上面的示例表中,小于 rev=4 的最新修訂的查詢結果應該是:
ID | 轉 | 型別 | foo_description |
---|---|---|---|
10 | 3 | 1 | 10 foo v2 |
20 | 2 | 0 | 20 foo v1 |
我使用的是 MySQL 資料庫,版本 5.7。
uj5u.com熱心網友回復:
在 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<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/318722.html