Oracle如何从审计表中按多条件查询指定发票号的最新变更记录
解决方案
核心思路:你需要获取每个「发票号+业务表+列」组合的最新变更记录,只需要在窗口函数的PARTITION BY中同时指定这三个分组维度即可,天然支持多表多列的查询场景,不需要额外调整窗口函数逻辑,仅修改WHERE子句的过滤条件就能完成扩展。
示例查询代码
SELECT Invoicenumber, Table_Name, Column_Name, `Timestamp`, `User`, Old_Value, New_Value FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY Invoicenumber, Table_Name, Column_Name ORDER BY `Timestamp` DESC ) AS rn FROM audit_table -- 多表多列查询仅需要修改此处过滤条件即可 WHERE Invoicenumber = '112' AND ( (Table_Name = 'A' AND Column_Name IN ('1', '2')) OR (Table_Name = 'B' AND Column_Name IN ('1', '2')) ) ) t WHERE rn = 1;
说明
- 如果需要保留同一分组下时间戳完全相同的多条重复记录,把
ROW_NUMBER()替换为RANK()即可 - 扩展查询范围非常简单:比如新增查询表C的3、4列,仅需要在WHERE的OR逻辑块中新增
(Table_Name = 'C' AND Column_Name IN ('3', '4'))即可 Timestamp和User属于SQL保留关键字,作为字段名使用时建议加反引号包裹避免语法报错
内容的提问来源于stack exchange,提问作者ItsMeGokul
相关产品推荐
相关产品推荐

