cindie2023-09-28 02:91 AM
Updated 2023-09-27
99
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
›
⌄
WITH userActiveMonths AS (
SELECT
recipient AS wallet_addresses,
date_trunc('month', min(block_timestamp)::date)::date AS start_month,
date_trunc('month', max(block_timestamp)::date)::date AS end_month,
datediff(month, start_month, end_month) AS active_months,
LISTAGG(DISTINCT date_trunc('month', block_timestamp)::date, ',') AS active_months_list
FROM ethereum.uniswapv3.ez_swaps
GROUP BY wallet_addresses
),
splitActiveMonths AS (
SELECT
wallet_addresses,
value::date AS active_month
FROM userActiveMonths,
TABLE(SPLIT_TO_TABLE(active_months_list, ',')) -- Split the active_months_list into rows
),
monthlyRetention AS (
SELECT
MONTHNAME(start_month) AS month,
COUNT(start_month) AS new_users,
COUNT(CASE WHEN EXISTS (SELECT 1 FROM splitActiveMonths WHERE splitActiveMonths.wallet_addresses = userActiveMonths.wallet_addresses AND splitActiveMonths.active_month = userActiveMonths.start_month) THEN 1 END) AS M0,
COUNT(CASE WHEN EXISTS (SELECT 1 FROM splitActiveMonths WHERE splitActiveMonths.wallet_addresses = userActiveMonths.wallet_addresses AND splitActiveMonths.active_month = add_months(userActiveMonths.start_month, 1)) THEN 1 END) AS M1,
COUNT(CASE WHEN EXISTS (SELECT 1 FROM splitActiveMonths WHERE splitActiveMonths.wallet_addresses = userActiveMonths.wallet_addresses AND splitActiveMonths.active_month = add_months(userActiveMonths.start_month, 2)) THEN 1 END) AS M2,
COUNT(CASE WHEN EXISTS (SELECT 1 FROM splitActiveMonths WHERE splitActiveMonths.wallet_addresses = userActiveMonths.wallet_addresses AND splitActiveMonths.active_month = add_months(userActiveMonths.start_month, 3)) THEN 1 END) AS M3,
COUNT(CASE WHEN EXISTS (SELECT 1 FROM splitActiveMonths WHERE splitActiveMonths.wallet_addresses = userActiveMonths.wallet_addresses AND splitActiveMonths.active_month = add_months(userActiveMonths.start_month, 4)) THEN 1 END) AS M4,
COUNT(CASE WHEN EXISTS (SELECT 1 FROM splitActiveMonths WHERE splitActiveMonths.wallet_addresses = userActiveMonths.wallet_addresses AND splitActiveMonths.active_month = add_months(userActiveMonths.start_month, 5)) THEN 1 END) AS M5
FROM userActiveMonths
WHERE start_month >= '2023-01-01' AND start_month <= '2023-04-01'
GROUP BY start_month
ORDER BY start_month
),
rotatedRetention AS (
Run a query to Download Data