У меня есть таблица (wallet_credit_details
), где каждая строка представляет собой отдельную транзакцию, выполненную одним клиентом. Есть еще одна таблица (wallet_usage_details
), которая показывает, как каждый пользователь платил за эти транзакции. То, что я хотел бы сделать, - для каждой строки (транзакции) в первой таблице агрегировать (счет и сумма) значения клиента из второй таблицы до даты транзакции в первой таблице.
Примером этого может быть для каждой транзакции подсчет количества предыдущих транзакций того же клиента, которых мы заплатили, используя «Пополнения».
SELECT
wallet.customer_id,
wallet.credit_id AS transaction_id,
COALESCE(COUNT(usage.debit_id), 0) AS transactions_paid_count_to_date,
COALESCE(SUM(usage.used_amt_usd), 0) AS transactions_paid_amount_to_date,
COALESCE(COUNT(CASE WHEN usage.credit_title = 'Topups' AND usage.credit_type = 'Credit Card Topups' THEN 1 END), 0) AS topups_used_count_to_date,
COALESCE(SUM(CASE WHEN usage.credit_title = 'Topups' AND usage.credit_type = 'Credit Card Topups' THEN usage.used_amt_usd END), 0) AS topups_used_amount_to_date
FROM
prod_dwh.wallet_credit_details AS wallet
LEFT JOIN
prod_dwh.wallet_usage_details AS usage
ON
wallet.customer_id = usage.user_id
AND usage.transaction_date < wallet.day
WHERE
wallet.credit_title = 'Topups'
AND wallet.credit_type = 'Credit Card Topups'
AND wallet.day >= DATE '{min_date}'
AND wallet.day <= DATE '{max_date}'
GROUP BY
wallet.customer_id,
wallet.credit_id
Как я могу воспроизвести те же логи c, используя оконная функция?