BigQuery 的 WHERE 子句中的 SELECT 语句不起作用
Posted
技术标签:
【中文标题】BigQuery 的 WHERE 子句中的 SELECT 语句不起作用【英文标题】:SELECT statement in WHERE clause on BigQuery not working 【发布时间】:2013-11-15 20:40:36 【问题描述】:我正在尝试在 Google BigQuery 上运行以下查询:
SELECT SUM(var1) AS Revenue
FROM [table1]
WHERE timeStamp = (SELECT MAX(timeStamp) FROM [table1])
我收到以下错误:
错误:在第 3 行第 19 列遇到“”。期待以下之一:
BigQuery 不支持此功能吗?如果是这样,会有一个优雅的选择吗?
【问题讨论】:
这对我来说似乎是一个错误。试试SELECT SUM(var1) AS Revenue FROM [table1] t WHERE NOT EXISTS (SELECT * FROM [table1] tt WHERE tt.timeStamp > t.timeStamp)
它返回以下内容:错误:错误:2.97 - 2.221。一次只能执行一个查询。
【参考方案1】:
不支持比较谓词中的子选择,但您可以使用 IN。
SELECT SUM(var1) AS Revenue
FROM [table1]
WHERE timeStamp IN (SELECT MAX(timeStamp) FROM [table1])
【讨论】:
很高兴知道并感谢您提供替代解决方案。【参考方案2】:我会使用 Rank() 来获取最大时间戳,并在 where 子句中过滤 #1。
select SUM(var1) AS Revenue
From
(SELECT var1
,RANK() OVER (ORDER BY timestamp DESC) as RNK
FROM [table1]
)
where RNK=1
我不知道它如何与 BQ 一起工作,但在其他数据库技术中它会更有效,因为它只涉及单表扫描而不是 2。
【讨论】:
以上是关于BigQuery 的 WHERE 子句中的 SELECT 语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择
BigQuery 将 rank / percent_rank 应用于带有 WHERE 子句的列
是否可以在 Union All BigQuery SQL 中让 where 子句引用另一个 where 子句?