【发布时间】:2021-11-15 12:08:22
【问题描述】:
我在这个 BigQuery/SQL 问题上遇到了一些死胡同。经过大约 1 小时的谷歌搜索后,我仍然没有弄清楚,所以我想我会在这里问。
我有一个包含客户订单数据的 BigQuery 表 (mycompany.engagement.product_orders)。表中的每一行都描述了客户下的订单,看起来像这样:
| 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 分钟的间隔(或任何间隔)计算客户订购的产品,以返回一个看起来像这样(某种东西)的表:
| 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 技能还很初级。
尝试: 按照上面发布的链接的框架,这与我的有点相似:
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')
返回:
Unrecognized name: MINUTE at [2:14]
【问题讨论】:
标签: sql datetime time group-by google-bigquery