在用户日表中查找最近的购买日期

时间:2018-09-25 20:36:28

标签: sql vertica

我正在尝试汇总一个查询,以获取每个用户最后一次购买的日期,购买金额和交易次数。每当用户在应用程序中进行任何操作(无论是否购买)时,我都会从一个用户日表中获取信息,该表包含一行。基本上,我想要获取的是“交易数量”字段大于零的最近日期。当我要寻找的是最后一次购买时,以下查询将返回特定用户的所有购买天数,因此所附屏幕快照中显示的第一行就是我要获取的内容。

screen shot of query and result set

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 :(得分:1)

我不会评论您查询的逻辑...如果您想要的只是结果集的第一行,则可以尝试:

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

ORDER BY 2 DESC在max(event_day)上对结果集进行排序,而LIMIT 1仅提取第一行。

答案 1 :(得分:0)

我不知道您数据的所有来龙去脉,但是我不明白为什么您在子查询中进行分组却没有任何汇总函数(求和,平均值,最小值,最大值等)。话虽如此,我会尝试这样的事情:

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;