首页 > 解决方案 > 如何获取每个用户的最后 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

标签: sqlgoogle-bigquery

解决方案


这确实有效:

        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

推荐阅读