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

如何优化该SQL查询?能否避免使用CTE实现指定数据筛选需求

优化方案:用窗口函数替代CTE实现需求

可以完全避免CTE,利用窗口函数ROW_NUMBER()(或RANK())直接在单表扫描中完成筛选,代码更简洁直观:

基础实现(仅保留单条最新记录)

SELECT *
FROM (
    SELECT 
        *,
        -- 按ID分组,每组内按集成日期倒序编号,最新记录编号为1
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY INTEGRATION_DATE DESC) AS record_rank
    FROM table_1
) filtered
WHERE 
    -- 非X的记录全部保留
    variable_A != 'X' 
    -- X的记录仅保留每组编号为1的最新记录
    OR record_rank = 1;

兼容多同日期最新记录的版本

如果存在同一ID下多条记录拥有相同的最大INTEGRATION_DATE,原CTE写法会保留所有这些记录,此时可以把ROW_NUMBER()换成RANK()来匹配原逻辑:

SELECT *
FROM (
    SELECT 
        *,
        RANK() OVER (PARTITION BY ID ORDER BY INTEGRATION_DATE DESC) AS record_rank
    FROM table_1
) filtered
WHERE 
    variable_A != 'X' 
    OR record_rank = 1;

优化优势

  1. 无需额外的分组关联操作,仅需一次表扫描,逻辑更紧凑
  2. 直接在子查询中完成排序编号,筛选条件清晰易懂
  3. 避免CTE带来的额外层级,代码结构更扁平

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:15:30