Я просматриваю таблицу с данными транзакций двухсторонней платформы, где есть покупатели и продавцы. Я хочу узнать общее количество уникальных комбинаций покупателей и продавцов. Допустим, Эйб покупает у Брэндона в январе, это 1 комбинация. Если Абэ покупает у Сиси в феврале, это дает 2, но если Абэ затем покупает у Брэндона снова, это все равно 2.
Мое решение было использовать функцию DENSE_RANK ():
WITH
combos AS (
SELECT
t.buyerid, t.sellerid,
DENSE_RANK() OVER (ORDER BY t.buyerid, t.sellerid) AS combinations
FROM transactions t
WHERE t.transaction_date < '2018-05-01'
)
SELECT
MAX(combinations) AS total_combinations
FROM combos
Это отлично работает. Каждая новая комбинация получает более высокий ранг, и если вы выбираете МАКСИМАЛЬНЫЙ результат, вы знаете количество уникальных комбинаций.
Тем не менее, я хочу знать это общее количество уникальных комбинаций в месяц. Проблема здесь в том, что если я группирую за месяц транзакции, он учитывает только уникальные комбинации в этом месяце. В примере с Abe это будет уникальная комбо в январе, а затем еще одна комбо в следующем месяце, потому что так работает группировка в SQL.
Пример:
transaction_date buyerid sellerid
2018-01-03 3828 219
2018-01-08 2831 123
2018-02-10 3828 219
Вывод именованных комбинаций DENSE_RANK () для всех этих строк:
transaction_date buyerid sellerid combinations
2018-01-03 3828 219 1
2018-01-08 2831 123 2
2018-02-10 3828 219 2
И, следовательно, при выборе комбинаций MAX вы знаете количество уникальных комбинаций покупателя / продавца, которое находится здесь.
Однако я хотел бы видеть общее количество уникальных комбинаций вплоть до каждого начала месяца, за все месяцы до сих пор. Но когда мы группируемся по месяцам, это будет выглядеть так:
transaction_date buyerid sellerid month combinations
2018-01-03 3828 219 jan 1
2018-01-08 2831 123 jan 2
2018-02-10 3828 219 feb 1
Хотя я на самом деле хотел бы вывод, как:
month total_combinations_at_month_start
jan 0
feb 2
mar 2
Как мне решить это? Я пытался найти помощь по всем видам оконных функций, но безуспешно до сих пор. Спасибо!