如何为用户返回每月最大日期
Posted
技术标签:
【中文标题】如何为用户返回每月最大日期【英文标题】:How to return max date per month for user 【发布时间】:2021-05-21 09:47:55 【问题描述】:我有下表:
我想为每个用户返回每个月的最大阈值日期,所以我的最终结果应该是这样的:
我想使用分析函数 ROW_NUMBER 并返回最大行数,但如何为每个用户每月执行此操作?在 BigQuery 中有没有更简单的方法?
【问题讨论】:
阈值日期有多行。你如何选择你想要的? 【参考方案1】:您可以将row_number
按用户和月份进行分区,然后分别取第一个:
SELECT user_id, threshold_date, net_deposists_usd
FROM (SELECT user_id, threshold_date, net_deposists_usd,
ROW_NUMBER () OVER (PARTITION BY user_id, EXTRACT (MONTH FROM threshold_date)
ORDER BY net_deposists_usd DESC) AS rk
FROM mytable)
WHERE rk = 1
【讨论】:
【参考方案2】:BigQuery 现在支持 qualify
,它可以满足您的所有需求。当月,只需使用date_trunc()
:
select t.*
from t
qualify row_number() over (partition by user_id, date_trunc(threshold_date, month)
order by threshold_date desc, net_deposits_usd desc
);
一个简单的替代方法是使用数组和group by
:
select array_agg(t order by threshold_date desc, net_deposits_usd desc limit 1)[ordinal(1)].*
from t
group by user_id, date_trunc(threshold_date, month) ;
【讨论】:
以上是关于如何为用户返回每月最大日期的主要内容,如果未能解决你的问题,请参考以下文章
如何为与python中列的最大值对应的多索引的每个级别返回索引