BigQuery上的WHERE子句中的SELECT语句无效

4

我想在Google BigQuery上运行以下查询:

SELECT SUM(var1) AS Revenue
FROM [table1]
WHERE timeStamp = (SELECT MAX(timeStamp) FROM [table1])

我遇到了以下错误:
错误:在第3行第19列遇到了“”,期望其中之一:
这在BigQuery中不被支持吗?如果不支持,是否有更优雅的替代方案?

这对我来说看起来像是一个bug。尝试使用以下代码:SELECT SUM(var1) AS Revenue FROM [table1] t WHERE NOT EXISTS (SELECT * FROM [table1] tt WHERE tt.timeStamp > t.timeStamp) - Sergey Kalinichenko
它返回以下内容:错误:2.97-2.221处的错误。一次只能执行一个查询。 - Sylvain Laporte
2个回答

5

不支持在比较谓词中使用子查询,但是您可以使用 IN。

SELECT SUM(var1) AS Revenue
FROM [table1]
WHERE timeStamp IN (SELECT MAX(timeStamp) FROM [table1])

好知道并感谢提供另一种解决方案。 - Sylvain Laporte

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中如何运作,但在其他数据库技术中,这种方法更有效,因为它只涉及单个表扫描而不是两个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接