使用 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
如果应用于您问题中的示例数据 - 输出为
这个 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
如果应用于您问题中的示例数据 - 输出为