【发布时间】:2017-12-19 17:19:27
【问题描述】:
我有一个包含以下信息的数据库
Customer_id, plan_id, plan_start_dte,
由于一些客户切换计划,有客户有多个重复的customer_ids,但有不同的plan_start_dte。我试图计算每天有多少次会员从任何其他计划(plan_id = 'premium')切换到高级计划。
也就是说,我正在尝试大致这样做:返回所有具有重复 customer_id 的行,除了原始计划 (min(plan_start_dte)),其中 plan_id = 'premium',并将它们按 plan_start_dte 分组。
我可以获取所有重复记录及其计数:
with plan_counts as (
select c.*, count(*) over (partition by CUSTOMER_ID) ct
from CUSTOMERS c
)
select *
from plan_counts
where ct > 1
其他步骤让我卡住了。首先,我尝试选择除原始计划之外的所有内容:
SELECT CUSTOMERS c
where START_DTE not in (
select min(PLAN_START_DTE)
from CUSTOMERS i
where c.CUSTOMER_ID = i.CUSTOMER_ID
)
但这失败了。如果我能解决这个问题,我相信我必须添加一个附加条件,c.PLAN_ID = 'premium' 然后按日期分组并进行计数。有人有什么想法吗?
【问题讨论】:
标签: sql oracle duplicates