如何解决计算每月重置的每天不同的值 (Big Query)
如果我有这样的表格,其中包含商店的唯一 ID 和他们下订单的日期
store_id | 订单日期 |
---|---|
A | 01-Jun-21 |
A | 02-Jun-21 |
B | 02-Jun-21 |
C | 02-Jun-21 |
A | 03-Jun-21 |
A | 04-Jun-21 |
D | 04-Jun-21 |
A | 01-Jul-21 |
B | 01-Jul-21 |
我需要按天聚合它,但每天应该只包含以前从未出现过的 store_id 并且每个月都会重置。
最终结果应该是这样的:
订单日期 | 计数商店 |
---|---|
01-Jun-21 | 1 |
02-Jun-21 | 2 |
03-Jun-21 | 0 |
04-Jun-21 | 1 |
01-Jul-21 | 2 |
- 6 月 1 日,仅商店 A 下订单,所以它是 1
- 6 月 2 日,A、B、C 店下单,但 A 店之前有下单,所以会被排除
- 6 月 3 日,应该是 0,因为只有之前下过单的 A 店下单了
- 在 7 月 1 日,它重置,因此再次对存储 A 和 B 进行计数
解决方法
如果您想在一个月内累计计算“唯一”商店,我建议使用 row_number()
来确定商店首次出现的时间:
select order_date,countif(seqnum = 1)
from (select t.*,row_number() over (partition by store_id,date_trunc(order_date,month)
order by order_date
) as seqnum
from t
) t
group by order_date;
,
您可以执行相关子查询以仅保留每个月的第一个条目:
Select order_date,count(*)
From table a
Where order_date = (Select min(x.order_date) from table x
Where a.store_id=x.store_id
And Timestamp_Trunc(x.order_date,Month) = Timestamp_Trunc(a.order_date,Month)
)
Group by order_date
Order By order_date
,
第三种紧凑的替代方法是将两个查询嵌套在一起:
Select EarlyOrder as Order_Date,Count(*) as Count_Store
From (Select Store_ID,Min(Order_Date) as EarlyOrder
From table
Group By Store_ID,Date_Trunc(Order_Date,month)
)
Group By EarlyOrder
Order By EarlyOrder
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。