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

SQL三表关联查询:筛选正金额匹配对应订单日期实现方法

实现方案

原有内连接写法的问题在于会拉取所有关联订单,既无法过滤负金额无效记录,也无法按产品维度只保留1条符合要求的记录,同时内连接会丢失无有效订单的产品数据。

核心逻辑

  • 提前过滤Order List表中金额小于等于0的无效记录,从根源上排除负金额订单被选中的可能
  • 使用窗口函数ROW_NUMBER()给每个产品下的有效订单按规则排序编号,取排序后序号为1的记录即为每个产品的第一条符合要求的订单
  • 用左连接关联产品表,保证无有效订单的产品也能返回,对应日期、金额字段返回NULL

可直接运行的SQL代码

WITH valid_orders AS (
    SELECT
        ol.ProductID,
        ol.Amount,
        o.Date,
        ROW_NUMBER() OVER (
            PARTITION BY ol.ProductID
            ORDER BY o.Date ASC -- 匹配示例逻辑:按日期从早到晚排序取第一条,可按需调整排序规则
        ) AS row_num
    FROM `Order List` ol
    INNER JOIN `Order` o
        ON ol.OrderID = o.OrderID
    WHERE ol.Amount > 0
)
SELECT
    p.ID AS `Product ID`,
    vo.Date,
    vo.Amount
FROM Products p
LEFT JOIN valid_orders vo
    ON p.ID = vo.ProductID
    AND vo.row_num = 1;

返回结果校验

执行后返回结果完全匹配预期:

Product IDDateAmount
ID110.01.213
ID215.04.222
ID3NULLNULL

注意:表名Order List、Order包含空格或属于SQL保留字,编写时需要根据你使用的数据库类型加对应的转义符(比如MySQL用反引号,SQL Server用方括号)。

内容的提问来源于stack exchange,提问作者Michael Müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:15:32