使用 SQL 计算按时间间隔分组的 BigQuery table 中的行条目

Counting row entries in BigQuery table grouped on a time interval using SQL

这个 BigQuery/SQL 问题让我陷入了困境。经过约 1 小时的谷歌搜索后,我仍然没有弄明白,所以我想我会在这里问。

我有一个客户订单数据的 BigQuery table (mycompany.engagement.product_orders)。 table 中的每一行都描述了客户下的订单,看起来像这样:

Row Product Timestamp Type CustomerName
1 Apple 2021-08-19 11:41:08.874 UTC Gala Philippe Kahn
2 Orange 2021-08-19 11:41:12.874 UTC Navel Grace Hopper
3 Pear 2021-08-19 11:41:24.874 UTC Bosc Vladimir Nabokov
4 Apple 2021-08-19 11:41:47.874 UTC Melba Sylvia Plath
5 Pear 2021-08-19 11:41:55.874 UTC Anjou Alan Turing
6 Pear 2021-08-19 11:42:10.874 UTC Asian Sylvia Plath
7 Apple 2021-08-19 11:42:11.874 UTC Fuji Vladimir Nabokov
8 Orange 2021-08-19 11:42:37.874 UTC Blood Ada Lovelace
9 Orange 2021-08-19 11:42:49.874 UTC Cara Grace Hopper
10 Apple 2021-08-19 11:42:51.874 UTC Melba Alan Turing

我想制定一个 SQL 查询,计算客户在 1 分钟间隔(或任何间隔)内订购的产品 return 一个 table 看起来(像这样的东西):

Row Product Timestamp Count
1 Apple 2021-08-19 11:41:00.000 UTC 2
2 Orange 2021-08-19 11:41:00.000 UTC 1
3 Pear 2021-08-19 11:41:00.000 UTC 2
4 Pear 2021-08-19 11:42:00.000 UTC 1
5 Apple 2021-08-19 11:42:00.000 UTC 2
6 Orange 2021-08-19 11:42:00.000 UTC 2

一些注意事项:

我发现的相关示例(例如:https://dba.stackexchange.com/questions/179823/grouping-count-by-interval-of-15-minutes)倾向于提供所有行条目的计数,而不是按增量的列值聚合。我知道这 可能 使用 partition by 或 group by 语句是可能的,但我不完全确定或如何将它们组合在一起。如果不可能的话,那就太好了 - 我的 SQL 技能还处于初级阶段。

尝试: 按照上面贴的link的框架,和我的有点相似:

SELECT 
    DATE_ADD(MINUTE, (DATEDIFF(MINUTE, '20000101', timestamp) / 1)*1, '20000101'),
    count(*)
FROM 
    mycompany.engagement.product_orders
GROUP BY
    DATE_ADD(MINUTE, (DATEDIFF(MINUTE, '20000101', timestamp) / 1)*1, '20000101')

Returns:

Unrecognized name: MINUTE at [2:14]

您想使用 date_trunc():

SELECT DATE_TRUNC(timestamp, MINUTE) as tm,
       COUNT(*)
FROM  mycompany.engagement.product_orders
GROUP BY tm;

考虑以下方法

select Product, 
  timestamp_trunc(Timestamp, minute) Timestamp,
  count(1) `Count`
from `mycompany.engagement.product_orders`
group by 1, 2        

如果应用于您问题中的示例数据 - 输出为