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

关联三表查询非completed状态的最新productorder记录及SQL修正

按productorder获取最新非completed记录的正确SQL实现

原SQL返回结果过多的核心问题:

  • 子查询缺少GROUP BY productorder,MAX(date)无法按分组正确计算最大日期
  • 子查询仅拿到productorder和最大日期,但未关联回原date表锁定对应记录,直接关联product、info表时,一个productorder对应多个productID会导致结果重复膨胀
  • 未通过日期字段关联子查询与原date表,无法精准定位每个分组的最新记录

方法一:窗口函数实现(逻辑清晰,推荐)

SELECT d.productorder, d.status, i.info
FROM (
    SELECT 
        productorder, 
        status, 
        date,
        -- 按productorder分组,日期倒序给记录编号,最新记录排第1
        ROW_NUMBER() OVER (PARTITION BY productorder ORDER BY date DESC) AS rn
    FROM date
    WHERE status <> 'completed'
) d
INNER JOIN product p ON d.productorder = p.productorder
INNER JOIN info i ON p.productID = i.productID
WHERE d.rn = 1; -- 只保留每个分组的最新记录

方法二:关联子查询实现(兼容不支持窗口函数的数据库)

SELECT d.productorder, d.status, i.info
FROM date d
INNER JOIN product p ON d.productorder = p.productorder
INNER JOIN info i ON p.productID = i.productID
WHERE d.status <> 'completed'
-- 匹配同productorder下的最大非completed日期
AND d.date = (
    SELECT MAX(date)
    FROM date
    WHERE productorder = d.productorder AND status <> 'completed'
);

两种方法都会先锁定每个productorder的最新非completed记录,再关联product和info表,从根源避免重复结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:35:21