Группировать по: вычисляемое поле для возврата соответствующей даты в большом запросе - PullRequest
0 голосов
/ 27 июня 2018

Мне нужно сделать анализ на уровне пользователя. Поскольку данные имеют много разных строк на пользователя (связанных с разными событиями), мне нужно сгруппировать по пользователю и создать несколько вычисляемых полей, которые представляют разные строки. Одним из полей является подсчет количества дней с момента последней покупки пользователя (сегодня - последняя дата покупки). Я уже пробовал много разных кодов, а также провел много исследований, но не смог найти решение.

Ниже приведены коды, которые для меня более понятны, но не работают:

Использование случая, когда утверждение

SELECT CASE WHEN LAST(tr_orderid <> "") THEN 
DATEDIFF(CURRENT_DATE(),event_date) ELSE NULL END AS recency_lastbooking
FROM df
GROUP BY domain_userid

Использование оператора IF

SELECT IF(LAST(tr_total > 0), DATEDIFF(CURRENT_DATE(),event_date), NULL) 
AS recency_lastbooking
FROM df
GROUP BY domain_userid

Я получаю ошибку: Выражение 'event_date' отсутствует в списке GROUP BY

Я думаю, что если я использую LAST (event_date), запрос вернет последнюю дату во всех строках определенного пользователя, а не в последний день, когда у пользователя произошло событие покупки.

P.S: я могу использовать tr_total (общая транзакция)> 0 или tr_orderid (идентификатор заказа транзакции) <> ""

Спасибо!

1 Ответ

0 голосов
/ 27 июня 2018

Я думаю, вы просто хотите функцию окна:

SELECT DATE_DIFF(CURRENT_DATE,
                 MAX(tr_orderid) OVER (PARTITION BY domain_userid),
                 day
                ) AS recency_lastbooking
FROM df;
...