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

SQL多条件筛选行:排除最新状态为Y的N状态记录

解决方案

针对百万级数据量的场景,推荐以下两种高效的实现方式,同时建议给order_id和date字段建立复合索引以提升查询性能:

方法一:使用窗口函数(性能最优)

通过窗口函数先获取每个订单的最新状态,再关联原表筛选符合条件的记录:

WITH latest_order_status AS (
    SELECT 
        order_id,
        status,
        ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY date DESC) AS rn
    FROM your_table_name
)
SELECT t.*
FROM your_table_name t
JOIN latest_order_status los ON t.order_id = los.order_id
WHERE t.status = 'N'
AND los.rn = 1
AND los.status != 'Y';

方法二:使用EXISTS子查询

直接对每条状态为N的记录,检查其对应订单的最新状态是否为Y,若不为Y则保留:

SELECT t.*
FROM your_table_name t
WHERE t.status = 'N'
AND NOT EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.order_id = t.order_id
    AND t2.date = (SELECT MAX(date) FROM your_table_name WHERE order_id = t.order_id)
    AND t2.status = 'Y'
);

性能优化建议

创建复合索引加速查询:

CREATE INDEX idx_order_date ON your_table_name(order_id, date DESC);

内容的提问来源于stack exchange,提问作者R.K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:42:41