Перевод моего запроса с использованием агрегатных функций на оконные функции - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть таблица (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, используя оконная функция?

...