我有一个包含以下列的表:date
,customers_id
和orders_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中这样做,谢谢!
答案 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