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

如何查找并清理RF_CUSTOMER表中重复OID且出生年份错误的数据

优化RF_CUSTOMER重复数据查询SQL方案

你的原SQL仅能找出所有OID重复的记录,但无法精准定位「同一OID下同时存在错误出生年份和正确出生年份」的目标数据,以下是针对性的优化方案:

方案1:针对已知错误/正确年份(如2052和1952)

如果已经明确错误年份和对应正确值,可直接筛选同时包含这两个年份的OID记录:

SELECT *
FROM RF_CUSTOMER
WHERE OID IN (
    SELECT OID
    FROM RF_CUSTOMER
    -- 假设存储生日的字段为birth_date,提取年份;如果是字符串类型,可改用SUBSTRING(birth_date, 1, 4)
    WHERE YEAR(birth_date) IN (1952, 2052)
    GROUP BY OID
    HAVING COUNT(DISTINCT YEAR(birth_date)) = 2
)
ORDER BY OID, YEAR(birth_date);

方案2:通用异常年份检测

如果需要覆盖所有不合理的出生年份(比如未来年份、过早年份),可先标记异常年份,再筛选同一OID下既有异常又有正常的记录:

WITH customer_year AS (
    SELECT 
        *,
        YEAR(birth_date) AS birth_year,
        -- 自定义异常年份规则:这里以"大于当前年份或早于1900"为例
        CASE 
            WHEN YEAR(birth_date) > YEAR(CURRENT_DATE) OR YEAR(birth_date) < 1900 
            THEN 1 
            ELSE 0 
        END AS is_abnormal
    FROM RF_CUSTOMER
)
SELECT cy.*
FROM customer_year cy
WHERE cy.OID IN (
    SELECT OID
    FROM customer_year
    GROUP BY OID
    -- 同一OID下同时存在异常和正常年份
    HAVING MAX(is_abnormal) = 1 AND MIN(is_abnormal) = 0
)
ORDER BY cy.OID, cy.is_abnormal;

原SQL的不足说明

原SQL仅通过GROUP BY OID HAVING COUNT(OID) > 1筛选OID重复的记录,会把所有OID重复的条目(包括多个正确年份的重复)都返回,无法精准定位你需要清理的「一错一对」的重复数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:25:31