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

Posted

技术标签:

【中文标题】在用户日表中查找最近的购买日期【英文标题】:Find most recent date of purchase in user day table 【发布时间】:2018-09-25 20:36:28 【问题描述】:

我正在尝试组合一个查询,该查询将获取每个用户最后一次购买的日期、购买金额和交易次数。我从一个用户日表中提取,该表包含用户每次在应用程序中执行任何操作(购买与否)时的一行。基本上我想要得到的是交易数量字段大于零的最近日期。当我要查找的只是最后一次购买时,下面的查询返回特定用户购买的所有天数,因此我想要获取的是所附屏幕截图中显示的第一行。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

我不知道您数据的所有细节,但我不明白为什么您在没有任何聚合函数(sum、average、min、max 等)的情况下在子查询中进行分组。话虽如此,我会尝试这样的事情:

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;

【讨论】:

以上是关于在用户日表中查找最近的购买日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 比较表中的日期

计算购买表中不同的新用户(MySQL)

如何在 iOS 上查找用户丢失的应用内购买?

如何确定购买该应用(不是应用内购买)的原始版本或日期

如何在时间间隔内查找购买次数 SQL

获得客户一年内的首次购买