计算每个客户的订单数

时间:2020-07-21 20:44:49

标签: sql google-bigquery

我有一个包含以下列的表:datecustomers_idorders_id(唯一)。
我想添加一列,其中每个order_id都可以看到给定客户在上一年已下订单的次数。
例如这就是它的样子:

customers_id | orders_id |    date     | order_rank
   2083      |   4725    | 2018-08-314 |     1
   2573      |   4773    | 2018-09-035 |     1
   3393      |   3776    | 2017-09-11  |     1
   3393      |   4172    | 2018-01-09  |     2
   3393      |   4655    | 2018-08-17  |     3

我正在BigQuery中这样做,谢谢!

2 个答案:

答案 0 :(得分:1)

count(*)与窗口框一起使用。理想情况下,您将使用一个间隔。但是BigQuery尚不支持该语法。因此,将其转换为数字:

select t.*,
       count(*) over (partition by customer_id
                      order by unix_date(date)
                      range between 364 preceding and current row
                     ) as order_rank
from t;

这将一年视为365天,这似乎适合大多数目的。

答案 1 :(得分:0)

我建议您使用over子句并限制where子句中的数据。您实际上并不需要为您的案件准备的窗口。如果您认为过去365天到现在这段时间是可以的,那么它将起作用:

select t.*,
       count(*) over (partition by customer_id
                      order by date
                     ) as c
from `your-table` t
where date > DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY)
order by customer_id, c

如果您需要特定的年份,例如2019年,则可以执行以下操作:

select t.*,
       count(*) over (partition by customer_id
                      order by date
                     ) as c
from `your-table` t
where date between cast("2019-01-01" as date) and cast("2019-12-31" as date)
order by customer_id, c