私はいくつかのカスタマースイッチ計画ので、以下の情報ORACLE SQL戻りのみ重複値(オリジナルではない)
Customer_id, plan_id, plan_start_dte,
でデータベースを持っている、いくつかの重複customer_id
sの顧客は、異なるplan_start_dte
と、があります。私は、メンバーが他のプラン(plan_id = 'premium'
)からプレミアムプランに何回切り替えたのかを数えようとしています。 plan_id = 'premium'
当初の計画(min(plan_start_dte)
)を除き、重複customer_id
ですべての行を返し、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'
というグループの追加条件です。誰でもアイデアはありますか?
この機能には「ウィンドウの指定がありません」が表示されますか?それはover陳述が欠けていますか?ユーザーがプランを4回変更し、4回目のプレミアムがプレミアムである場合は、これを数えたいと思うだけです。それをちょっと試してみると、次のようなものがあります(オリジナルではないプレミアムプラン) select * from (select c。*、lag(plan_id)over(order by plan_start_dte)prev_plan_id from customer_hist C )C WHERE prev_plan_idは AND PLAN_ID =「プレミアム」 NULLではありませんが、私は月によってその上に集約したときに数字が –
ええ、私は私が遅れ正しい方法を使用していない実現しています高いようです。顧客IDの各プランの前にプランが存在しない場合は、何らかのフラグを付けて(null値で)使用しようとしていました。 –