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

SQL Server中如何优化多CODIGO同FECHA的查询语句?

优化SQL查询方案:获取指定CODIGO且FECHA跨多CODIGO存在的记录

针对你的需求——筛选CODIGO = 'AAA'且对应FECHA同时存在于CODIGO = 'BBB'和CODIGO = 'CCC'的记录,结合表主键(CODIGO + FECHA)的索引优势,提供以下几种高效优化方案:

方案一:分组统计+HAVING关联(推荐大表场景)

利用主键索引快速过滤目标CODIGO的记录,通过分组统计找出在三个CODIGO中都存在的FECHA,再关联回原表获取AAA的记录:

SELECT h.*
FROM HISTORICO h
INNER JOIN (
    -- 筛选出在AAA、BBB、CCC中都存在的FECHA
    SELECT FECHA
    FROM HISTORICO
    WHERE CODIGO IN ('AAA', 'BBB', 'CCC')
    GROUP BY FECHA
    HAVING COUNT(DISTINCT CODIGO) = 3
) f ON h.FECHA = f.FECHA
WHERE h.CODIGO = 'AAA';

优势:子查询仅处理目标CODIGO的数据集,分组统计基于索引列执行,整体IO开销低,适合数据量较大的场景。

方案二:双重EXISTS判断(逻辑直观)

直接对每条AAA的记录,检查BBB和CCC是否存在相同FECHA的记录,利用主键索引快速定位匹配项:

SELECT *
FROM HISTORICO h
WHERE h.CODIGO = 'AAA'
-- 检查该FECHA是否存在于BBB中
AND EXISTS (
    SELECT 1
    FROM HISTORICO
    WHERE CODIGO = 'BBB' AND FECHA = h.FECHA
)
-- 检查该FECHA是否存在于CCC中
AND EXISTS (
    SELECT 1
    FROM HISTORICO
    WHERE CODIGO = 'CCC' AND FECHA = h.FECHA
);

优势:逻辑清晰易懂,每个EXISTS子查询都通过主键索引直接定位,无需额外分组或排序,小数据量下性能优异。

方案三:窗口函数统计(代码简洁)

适用于SQL Server 2017及以上版本,通过窗口函数直接计算每个FECHA对应的不同CODIGO数量,再筛选符合条件的记录:

SELECT CODIGO, FECHA, VALOR
FROM (
    SELECT *,
           -- 统计每个FECHA下包含的不同CODIGO数量
           COUNT(DISTINCT CODIGO) OVER(PARTITION BY FECHA) AS CodigoCount
    FROM HISTORICO
    WHERE CODIGO IN ('AAA', 'BBB', 'CCC')
) t
WHERE CodigoCount = 3 AND CODIGO = 'AAA';

优势:无需关联子查询,代码结构简洁,窗口函数的计算基于过滤后的数据集,性能表现稳定。

性能注意事项

由于表主键是CODIGO + FECHA,以上所有方案都会自动利用该索引进行快速过滤和匹配,避免全表扫描。实际使用中可根据数据量大小和SQL Server版本选择最适合的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:45:56