我的查询目前如下所示:
WITH bins AS(
SELECT GENERATE_ARRAY(0,1470,30) AS low,
GENERATE_ARRAY(0,1500,30) AS top),
ride AS(
SELECT DATE_DIFF(ended_at,started_at,minute) as cicle
FROM `data-project-389314.Cyclist.july23_trip_filtered`
WHERE rideable_type != 'docked_bike')
SELECT
low,
top,
cicle
FROM
bins
LEFT JOIN ride
on cicle >= low --Error line
AND cicle < top
GROUP BY
low,top
ORDER BY
low
我不断收到的错误是:
参数类型的运算符 >= 没有匹配的签名:
、INT64
。支持的签名:ANY >= ANY [18:11]ARRAY<INT64>
我感谢任何帮助,
谢谢。
生成一个数字系列,其间隔为数字 30,代表 30 分钟。
我尝试了其他代码,这让我认识到 Bigquery 不允许时间日期 >= 24:00:00 但我总是在同一变量上收到错误。
您的查询中有几个错误:
GENERATE_ARRAY
函数将生成一个数组,而不是一个表。因此,当您尝试连接匹配值时,您实际上是在尝试将“cicle”的每个单个值与完整数组进行匹配。GROUP BY
子句,但没有使用聚合函数。如果根据数据的性质认为有必要,您可以使用 DISTINCT
删除重复记录。或者,如果应执行任何聚合函数,请确保聚合“cicle”或将其添加到 GROUP BY
子句,以避免细微的错误。为了修复这些错误,您可以:
UNNEST
函数的输出上交叉连接 GENERATE_ARRAY
的应用程序,将数组解包为表格值。
GROUP BY
子句中添加“cicle”列,以反映 cicle 分区。
BETWEEN ... AND ...
代替
WHERE
子句中的两个条件
WITH bins AS(
SELECT *
FROM UNNEST(GENERATE_ARRAY(0,1470,30)) AS low,
UNNEST(GENERATE_ARRAY(0,1500,30)) AS high
), ride AS(
SELECT DATE_DIFF(ended_at,started_at,minute) as cicle
FROM `data-project-389314.Cyclist.july23_trip_filtered`
WHERE rideable_type != 'docked_bike'
)
SELECT DISTINCT low,
high,
cicle
FROM bins
LEFT JOIN ride
ON cicle BETWEEN low AND high
ORDER BY low