You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:06:03