Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5b30ebd

Browse files
committed
Adding Solutions
1 parent 285f5b9 commit 5b30ebd

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
WITH RECURSIVE customer_purchase_years AS (
2+
SELECT customer_id,MIN(EXTRACT(YEAR FROM order_date)) AS min_year,MAX(EXTRACT(YEAR FROM order_date)) AS max_year
3+
FROM orders_2474
4+
GROUP BY customer_id
5+
),
6+
all_years AS (
7+
SELECT customer_id,min_year AS year,max_year
8+
FROM customer_purchase_years
9+
UNION
10+
SELECT customer_id,year+1 AS year,max_year
11+
FROM all_years
12+
WHERE year<max_year
13+
),
14+
all_year_purchases AS (
15+
SELECT ay.customer_id,ay.year,COALESCE(SUM(o.price),0) AS total_purchase
16+
FROM all_years ay
17+
LEFT JOIN orders_2474 o ON ay.customer_id = o.customer_id AND ay.year = EXTRACT(YEAR FROM o.order_date)
18+
GROUP BY ay.customer_id,ay.year
19+
),
20+
ranked AS (
21+
SELECT *,
22+
DENSE_RANK() OVER (PARTITION BY customer_id ORDER BY year) -
23+
DENSE_RANK() OVER (PARTITION BY customer_id ORDER BY total_purchase) AS diff
24+
FROM all_year_purchases
25+
)
26+
SELECT DISTINCT customer_id
27+
FROM ranked
28+
WHERE customer_id NOT IN (SELECT DISTINCT customer_id FROM ranked WHERE diff <> 0);
29+
30+
--OR--
31+
32+
WITH cte AS(
33+
SELECT customer_id, EXTRACT(YEAR FROM order_date) AS year, price
34+
FROM orders_2474
35+
),
36+
cte1 AS(
37+
SELECT customer_id,year,SUM(price) AS prices
38+
FROM cte
39+
GROUP BY customer_id,year
40+
),
41+
cte2 AS(
42+
SELECT *,
43+
DENSE_RANK() OVER(PARTITION BY customer_id ORDER BY prices) AS rn
44+
FROM cte1
45+
),
46+
cte3 AS(
47+
SELECT DISTINCT customer_id,year-rn AS new_line
48+
FROM cte2
49+
)
50+
SELECT customer_id
51+
FROM cte3
52+
GROUP BY customer_id
53+
HAVING (COUNT(new_line)=1);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /