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

SQL统计近91天急救服务索赔数时子查询返回全量数据的解决方法

SQL修正方案

问题原因

原统计就诊次数的子查询未添加与外层一致的急救编码、日期范围筛选条件,会扫描全量历史索赔记录做计数,既不符合统计范围要求,也会产生不必要的性能开销。

修改要点

  • 子查询内同步添加与外层完全一致的筛选规则,仅统计近91天内的急救服务索赔记录,避免拉取客户全量历史数据
  • 子查询内通过HAVING子句提前过滤就诊次数不足3次的客户,减少后续关联计算的数据量,利用「符合条件的记录单客户最多10条」的特性大幅提升查询效率
  • 关联后直接引用子查询预计算的VisitCount字段做排序,无需在外层重复分组计数

修正后的完整SQL(保留单条就诊明细场景)

SELECT
    UMI,
    PIN,
    main.Agreement,
    sq.VisitCount,
    med.Code,
    Date
FROM main
INNER JOIN (
    SELECT 
        Agreement, 
        COUNT(*) as VisitCount
    FROM main
    WHERE 
        med.Code BETWEEN '99281' AND '99285'
        AND Date >= (CURRENT_DATE - 91)
    GROUP BY Agreement
    HAVING COUNT(*) >= 3
) AS sq ON main.Agreement = sq.Agreement
-- 此处保留你原本验证可用的其他内连接逻辑
--Inner Joins that work are excluded
WHERE 
    med.Code BETWEEN '99281' AND '99285'
    AND Date >= (CURRENT_DATE - 91)
ORDER BY sq.VisitCount DESC;

简化版本(仅需聚合统计就诊次数场景)

如果你不需要展示单条索赔明细,只需要输出近91天急救就诊≥3次的客户ID和对应就诊次数,可以去掉子查询关联,直接单表聚合,性能更高:

SELECT
    Agreement,
    COUNT(*) as VisitCount
FROM main
WHERE 
    med.Code BETWEEN '99281' AND '99285'
    AND Date >= (CURRENT_DATE - 91)
GROUP BY Agreement
HAVING COUNT(*) >= 3
ORDER BY VisitCount DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:06:24