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

SQL查询相同Reference对应3个及以上不同SerialNumber的近10天错误数据

问题核心原因

你原有SQL的问题在于GROUP BY包含了所有表字段,SerialNumber也被纳入了分组维度,因此统计的是同一SerialNumber+同一Reference下的记录条数,自然只能筛选出单个序列号在对应参考编号下重复报错3次以上的记录,和你需要的「同一Reference下有≥3个不同SerialNumber」的需求不符。

修正后的SQL方案

这里提供两种常用实现方式,均兼容主流SQL数据库(MySQL、SQL Server、PostgreSQL等),使用时将你的表名替换为实际表名即可:

方案1:使用窗口函数(写法更简洁)

SELECT InspectDate, SerialNumber, Reference, Error, PartNumber
FROM (
    SELECT 
        *,
        COUNT(DISTINCT SerialNumber) OVER (PARTITION BY Reference) AS distinct_serial_cnt
    FROM 你的表名
    WHERE InspectDate >= DATEADD(day, -10, GETDATE())
) t
WHERE distinct_serial_cnt >= 3
ORDER BY CAST(InspectDate AS DATETIME) DESC

逻辑说明:先筛选最近10天的所有错误记录,再给每个Reference统计对应的不同SerialNumber数量,最后过滤出数量≥3的所有关联记录即可。

方案2:使用子查询关联(兼容性更强)

SELECT t1.*
FROM 你的表名 t1
INNER JOIN (
    SELECT Reference
    FROM 你的表名
    WHERE InspectDate >= DATEADD(day, -10, GETDATE())
    GROUP BY Reference
    HAVING COUNT(DISTINCT SerialNumber) >=3
) t2 ON t1.Reference = t2.Reference
WHERE t1.InspectDate >= DATEADD(day, -10, GETDATE())
ORDER BY CAST(t1.InspectDate AS DATETIME) DESC

逻辑说明:先单独筛选出符合「最近10天、对应≥3个不同SerialNumber」要求的Reference列表,再关联原表取出这些Reference对应的所有最近10天的错误记录。

两种方案返回的结果都和你给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:15:02