sql - 如何获取每个用户的最后 7 个活动
问题描述
有人可以帮我解决一些问题吗?
所以我想看看这个月的用户行为。我试图通过用户 ID 对他们的所有数据进行排序,但 bigquery 说:
查询执行期间资源超出:无法在分配的内存中执行查询。峰值使用量:限制的 107%。顶级内存使用者:ORDER BY 操作:100%。
因此我想只获取用户的最后 10 个活动。例如我有:
UserID timestamp
123 28-Nov-2018
123 28-Nov-2018
123 28-Nov-2018
123 28-Nov-2018
123 27-Nov-2018
123 26-Nov-2018
123 20-Nov-2018
123 08-Nov-2018
123 08-Nov-2018
123 07-Nov-2018
123 05-Nov-2018
123 03-Nov-2018
234 28-Nov-2018
234 26-Nov-2018
234 25-Nov-2018
234 24-Nov-2018
234 24-Nov-2018
因此结果将是:
UserID timestamp
123 28-Nov-2018
123 28-Nov-2018
123 28-Nov-2018
123 28-Nov-2018
123 27-Nov-2018
123 26-Nov-2018
123 20-Nov-2018
123 08-Nov-2018
123 08-Nov-2018
123 07-Nov-2018
234 28-Nov-2018
234 26-Nov-2018
234 25-Nov-2018
234 24-Nov-2018
234 24-Nov-2018
我应该只获取用户 123 的最后 10 个活动,同时捕获用户 234 的所有活动,因为它的活动小于 10
解决方案
这确实有效:
create table d061_userid (userid number,tt date);
//do inserts
select * from d061_userid;
123 28-NOV-18
123 28-NOV-18
123 28-NOV-18
123 28-NOV-18
123 27-NOV-18
123 20-NOV-18
123 08-NOV-18
123 08-NOV-18
123 07-NOV-18
123 05-NOV-18
123 03-NOV-18
234 28-NOV-18
234 26-NOV-18
234 25-NOV-18
234 24-NOV-18
select a.userID,a.tt from (select userID, tt,
row_number() over (partition by userID order by tt desc) rank
from d061_userid
) a where rank<=7 ;
output:
123 28-NOV-18
123 28-NOV-18
123 28-NOV-18
123 28-NOV-18
123 27-NOV-18
123 20-NOV-18
123 08-NOV-18
234 28-NOV-18
234 26-NOV-18
234 25-NOV-18
234 24-NOV-18
234 24-NOV-18
推荐阅读
- javascript - 在通过 AJAX 发送之前存储客户数据(电话)的最佳方式
- r - 解析字符中的数值,因为它们与`scipen`的值无关
- swift - Swift – 将 Stripe 更新到 21.0.1 后“没有这样的模块‘Stripe3DS2’”
- php - 尝试在 laravel 8.0 中记录事件时调用未定义的方法
- python - 我无法删除整列 - Pandas
- r - 在 for 循环中打印 DiagrammeR 对象
- c - 在 C 中运行“parsefmt”的头文件?
- python-3.x - 我应该如何减少重复数字的大型笛卡尔积的内存使用量?
- javascript - MathJax 消息转换器
- laravel - Laravel Collection 根据下一条记录设置结束日期