0
我有以下信息ORACLE SQL只返回重复值(不是原来的)
Customer_id, plan_id, plan_start_dte,
由于一些客户交换机计划的数据库,有客户与几个重复customer_id
S,但具有不同的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'
然后按日期分组并进行计数。有人有主意吗?
我得到“缺少此功能的窗口规范”?它是否遗漏了过度声明?只是为了澄清,如果一个用户已经改变了一个计划4次,而第四次是溢价,我希望这个计数。玩了一下看起来像下面给我什么我想要的(溢价计划是非原创的) 选择*从 (选择c。*,lag(plan_id)over(order by plan_start_dte)作为prev_plan_id 从customer_histç )C WHERE prev_plan_id IS NOT NULL AND plan_id的数据类型=“溢价” 但是,当我在聚集通过这一个月的数字似乎很高 –
是啊,我意识到我不使用滞后的正确途径。如果在客户ID的每个计划之前不存在计划,试图以某种方式标记(使用空值)。 –