WITH new_sushi_buyers AS (SELECT tx_to,
min(block_timestamp) as earliest_swap_time
FROM ethereum.sushi.ez_swaps
WHERE symbol_out = 'SUSHI'
GROUP BY tx_to),
first_event AS (
SELECT tx.origin_from_address,
min(tx.block_timestamp) as first_event_time
FROM ethereum.core.fact_event_logs tx
JOIN new_sushi_buyers
ON tx.origin_from_address = new_sushi_buyers.tx_to
AND date_trunc('hour', tx.block_timestamp) = date_trunc('hour', new_sushi_buyers.earliest_swap_time)
WHERE tx.block_timestamp > new_sushi_buyers.earliest_swap_time
GROUP BY 1
)
SELECT event_name,
count(event_name) as event_num,
row_number() over (order by event_num desc) as index
FROM ethereum.core.fact_event_logs tx
JOIN first_event
ON tx.origin_from_address = first_event.origin_from_address AND tx.block_timestamp = first_event.first_event_time
GROUP BY event_name
QUALIFY index <= 20
ORDER BY index