计算每月重置的每天不同的值(大查询)

Calculate distinct values per day that resets each month (Big Query)

如果我有这样的 table,其中包含商店的唯一 ID 和他们下订单的日期

store_id order_date
一个 21 年 6 月 1 日
一个 02-Jun-21
B 02-Jun-21
C 02-Jun-21
一个 21 年 6 月 3 日
一个 21 年 6 月 4 日
D 21 年 6 月 4 日
一个 21 年 7 月 1 日
B 21 年 7 月 1 日

我需要按天汇总,但每天应该只包含以前从未出现过的 store_id,并且每个月都会重置。

最终结果应该是这样的:

order_date 计数商店
21 年 6 月 1 日 1
02-Jun-21 2
21 年 6 月 3 日 0
21 年 6 月 4 日 1
21 年 7 月 1 日 2

您可以执行相关子查询以仅保留每个月的第一个条目:

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

如果你想在一个月内累计计算“唯一”商店,我建议使用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 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