如何为用户返回每月最大日期

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中列的最大值对应的多索引的每个级别返回索引

递归输入一个日期返回前12个月每月最后一天

js输入一个日期返回当前12个月每月最后一天

如何为可以返回 nil 的 NSPredicate 创建惰性 var

MySQL 工作台,如何为日期创建过滤器以安排组

如何为 Facebook 设置返回 JSON 的 XMPP 服务器?