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

SQL查询订单表更新记录 生成每日订单变更差异报表需求咨询

SQL查询实现方案

适用场景说明

适配MySQL 8.0+/PostgreSQL/SQL Server等支持CTE的主流数据库,低版本MySQL可将CTE替换为子查询使用。

每日运行版本(仅返回当日发生变更的订单的所有历史记录)

WITH order_change_flag AS (
    SELECT 
        OrderNO,
        COUNT(DISTINCT OrderQty) > 1 AS is_changed
    FROM 订单表 -- 此处替换为实际表名
    WHERE OrderNO IN (
        -- 筛选当日有新记录生成的订单
        SELECT DISTINCT OrderNO 
        FROM 订单表
        WHERE CAST(CreatedOn AS DATE) = CURDATE()
        -- 不同数据库适配调整:
        -- SQL Server替换为:CAST(CreatedOn AS DATE) = CAST(GETDATE() AS DATE)
        -- PostgreSQL替换为:CreatedOn::DATE = CURRENT_DATE
    )
    GROUP BY OrderNO
)
SELECT t.*
FROM 订单表 t
JOIN order_change_flag f ON t.OrderNO = f.OrderNO
WHERE f.is_changed = 1
ORDER BY t.OrderNO, t.CreatedOn ASC;

全量版本(返回所有历史上存在过变更的订单的所有记录)

WITH order_change_flag AS (
    SELECT 
        OrderNO,
        COUNT(DISTINCT OrderQty) > 1 AS is_changed
    FROM 订单表
    GROUP BY OrderNO
)
SELECT t.*
FROM 订单表 t
JOIN order_change_flag f ON t.OrderNO = f.OrderNO
WHERE f.is_changed = 1
ORDER BY t.OrderNO, t.CreatedOn ASC;

逻辑说明

  1. 先通过子查询锁定需要校验的订单范围:每日运行版本仅校验当日有新记录的订单,缩小计算范围提升性能
  2. 按订单号分组统计不同OrderQty的数量,数量大于1即判定该订单存在数量变更
  3. 关联原表返回存在变更的订单的全部历史版本,按创建时间排序可直观查看变更轨迹

注:如果表中存在完全重复的冗余记录(如示例中ID为126948的两条完全相同的记录),可在查询前先通过DISTINCT去重避免误判。

内容的提问来源于stack exchange,提问作者flo_rin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:57:01