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

PDO实现关联独立状态表查询指定最新状态的所有订单

查询指定最新状态订单的SQL实现方案

窗口函数实现(适配MySQL 8.0+、PostgreSQL、SQL Server等新版数据库)

写法最简洁,通过窗口函数直接筛选每个订单的最新状态记录:

SELECT o.* 
FROM orders o
INNER JOIN (
    SELECT 
        order_id, 
        status,
        ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY statusdate DESC, id DESC) AS rn
    FROM status
) s ON o.id = s.order_id
WHERE s.rn = 1 AND s.status = ?

排序规则额外加id DESC是为了规避同一时间点有多条状态变更记录时,取自增ID最大的那条作为最新记录,比仅按时间排序更准确。

低版本数据库兼容实现(支持MySQL 5.x等不支持窗口函数的场景)

先通过分组子查询拿到每个订单最新的状态记录ID,再关联过滤:

SELECT o.*
FROM orders o
INNER JOIN status s ON o.id = s.order_id
INNER JOIN (
    SELECT MAX(id) AS latest_status_id 
    FROM status 
    GROUP BY order_id
) latest_s ON s.id = latest_s.latest_status_id
WHERE s.status = ?

无需JOIN的更轻量实现

可以用EXISTS子查询实现,不需要关联全量数据,查询性能更优:

SELECT o.*
FROM orders o
WHERE EXISTS (
    SELECT 1
    FROM status s
    WHERE s.order_id = o.id
    AND s.status = ?
    AND s.id = (SELECT MAX(id) FROM status WHERE order_id = o.id)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:39:04