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

如何编写SQL查询获取同一用户下重复服务及订阅日期的ID

解决同一用户下重复service与subscription_date的查询问题

你的原查询逻辑错误在于:它是统计所有用户中相同service和subscription_date的总数量,而非限定在单个用户ID内的重复,因此无法满足需求。

以下是两种符合需求的SQL方案:

方案1:GROUP BY + 关联查询

这种方法先筛选出单个用户下重复的(service, subscription_date)组合,再关联回原表获取完整记录:

SELECT u.user_id, u.service, u.subscription_date
FROM user u
INNER JOIN (
    -- 找出同一用户下重复的服务+日期组合
    SELECT user_id, service, subscription_date
    FROM user
    GROUP BY user_id, service, subscription_date
    HAVING COUNT(*) > 1
) AS duplicate_groups
ON u.user_id = duplicate_groups.user_id
   AND u.service = duplicate_groups.service
   AND u.subscription_date = duplicate_groups.subscription_date;

如果仅需要存在重复的用户ID列表,可简化为:

SELECT DISTINCT user_id
FROM user
GROUP BY user_id, service, subscription_date
HAVING COUNT(*) > 1;

方案2:窗口函数标记重复项

使用窗口函数可以直接在原数据中标记每个(user_id, service, subscription_date)组合的重复次数,再筛选出次数>1的记录:

SELECT user_id, service, subscription_date
FROM (
    SELECT 
        user_id,
        service,
        subscription_date,
        -- 按用户、服务、日期分组统计数量
        COUNT(*) OVER(PARTITION BY user_id, service, subscription_date) AS repeat_count
    FROM user
) AS temp
WHERE repeat_count > 1;

效果验证

针对你提供的测试数据:

  • 用户002的两条记录,service相同但subscription_date不同,分组后每组count=1,不会被筛选
  • 用户003的两条记录,user_id、service、subscription_date完全相同,分组后count=2,会被正确返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:17:40