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

技术问询:重复记录去重,仅提取状态为A的特定记录

问题场景

有一组重复记录,仅status列的值不同(分别为A和B):

recordstatus
XXXXXXXXXXA
XXXXXXXXXXB
需求

只保留状态为A的记录,移除对应的状态为B的重复记录。

现有SQL的问题

你提供的SQL片段存在语法错误,且逻辑无法实现需求:

Select record
case
when status in ('a', 'b') then ('a')
from xyz

这段SQL缺少END来闭合CASE语句,且仅试图将状态统一改为A,没有处理去重过滤的核心逻辑。

可行解决方案

方案1:直接筛选状态为A的记录

如果需求仅为获取状态为A的记录,直接添加WHERE条件即可:

SELECT record, status
FROM xyz
WHERE status = 'A';

方案2:分组优先保留A状态

如果同一record存在多状态,但需优先保留A(无论是否有B),可使用分组聚合:

SELECT record, MAX(status) AS status
FROM xyz
WHERE status IN ('A', 'B')
GROUP BY record;

注:由于'A'的ASCII码大于'B',MAX(status)会自动返回A;若使用小写的'a'和'b',该逻辑同样适用。

方案3:窗口函数精准筛选

如果需要更灵活的优先级逻辑,可通过窗口函数排序后取第一条:

WITH ranked_records AS (
    SELECT 
        record, 
        status,
        ROW_NUMBER() OVER (PARTITION BY record ORDER BY CASE WHEN status = 'A' THEN 1 ELSE 2 END) AS rn
    FROM xyz
    WHERE status IN ('A', 'B')
)
SELECT record, status
FROM ranked_records
WHERE rn = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:07:09