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

如何修改SQL实现子查询遍历support表所有pmi值筛选符合要求的结果

方案1:窗口函数实现(推荐,兼容所有支持窗口函数的主流数据库)

该方案逻辑清晰,执行效率更高,适配MySQL 8.0+、PostgreSQL、SQL Server、Oracle等绝大多数新版本数据库:

SELECT pmi
FROM (
    SELECT 
        pmi,
        reason,
        ROW_NUMBER() OVER (PARTITION BY pmi ORDER BY datereceived DESC) AS rn
    FROM support
) t
WHERE rn = 1 AND reason = 'XYZ';

逻辑说明:用ROW_NUMBER()窗口函数按pmi分组,每组内按datereceived倒序排序,每组排序为1的记录就是对应pmi的最新数据,直接筛选最新数据中reason为XYZ的记录即可得到目标pmi值。


方案2:沿用原有逻辑的关联子查询实现

如果你希望和原写法逻辑保持一致,或使用的数据库不支持窗口函数,可以修改为关联子查询:

SELECT DISTINCT pmi
FROM support s
WHERE supportid = (
    SELECT supportid 
    FROM support 
    WHERE pmi = s.pmi
    ORDER BY datereceived DESC
    FETCH FIRST 1 ROW ONLY
)
AND reason ='XYZ';

逻辑说明:把原写法中子查询硬编码的pmi = '123'替换为和外层表的pmi关联,即可遍历表中所有pmi逐个匹配最新记录,加DISTINCT避免符合条件的pmi重复返回。如果你的数据库不支持FETCH FIRST 1 ROW ONLY语法,可以替换为对应数据库的分页写法,比如MySQL用LIMIT 1、SQL Server用TOP 1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:54:04