Найти самую последнюю дату покупки в пользовательской таблице - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь собрать запрос, который будет извлекать дату, сумму покупки и количество транзакций за последний раз, когда каждый пользователь совершил покупку.Я вытягиваю из таблицы дней пользователя, которая содержит строку, каждый раз, когда пользователь что-то делает в приложении, покупает он или нет.По сути, все, что я пытаюсь получить, - это самая последняя дата, когда поле количества транзакций было больше нуля.Приведенный ниже запрос возвращает все дни покупки, совершенной конкретным пользователем, когда все, что я ищу, это последняя покупка, поэтому я пытаюсь получить только 1-ю строку, показанную на прилагаемом скриншоте.

снимок экрана с запросом и набором результатов

select tuid, max(event_day), 
purchases_day_rev as last_dop_rev, 
purchases_day_num as last_dop_quantity,  
purchases_day_rev/nullif(purchases_day_num,0) as last_dop_spend_pp
from 
(select tuid, event_day,purchases_day_rev,purchases_day_num 
from
app.user_day
where purchases_day_num > 0
and tuid='122d665e-1d71-4319-bb0d-05c7f37a28b0'
group by 1,2,3,4) a
group by 1,3,4,5

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Я не собираюсь комментировать логику вашего запроса ... если вам нужна только первая строка вашего набора результатов, вы можете попробовать:

<your query here> ORDER BY 2 DESC LIMIT 1 ;

Где ORDER BY 2 DESC ордеранабор результатов для max (event_day) и LIMIT 1 извлекает только первую строку.

0 голосов
/ 26 сентября 2018

Я не знаю всех входов и выходов ваших данных, но я не понимаю, почему вы группируете внутри подзапроса без какой-либо агрегирующей функции (сумма, среднее, минимальное, максимальное и т. Д.).С учетом сказанного, я бы попробовал что-то вроде этого:

select tuid
,event_day
,purchases_day_rev as last_dop_rev
,purchases_day_num as last_dop_quantity
,purchases_day_rev/nullif(purchases_day_num,0) as last_day_spend_pp
from app.user_day a
inner join
(
select tuid
,max(event_day) as MAX_DAY
from app.user_day
where purchases_day_num > 0
and tuid='122d665e-1d71-4319-bb0d-05c7f37a28b0'
group by 1
) b
on a.tuid = b.tuid
and a.event_day = b.max_day;
...