Seleziona la dichiarazione in cui la clausola su BigQuery non funziona
-
20-12-2019 - |
Domanda
Sto cercando di eseguire la seguente query su Google BigQuery:
SELECT SUM(var1) AS Revenue
FROM [table1]
WHERE timeStamp = (SELECT MAX(timeStamp) FROM [table1])
.
Sto ottenendo il seguente errore:
Errore: incontrato "" Alla linea 3, colonna 19. Aspettava uno dei seguenti:
Questo non è supportato in BigQuery?Se è così, ci sarà un'alternativa elegante?
Soluzione
Sottoseselect in un predicato di confronto non è supportato, ma è possibile utilizzare in.
SELECT SUM(var1) AS Revenue
FROM [table1]
WHERE timeStamp IN (SELECT MAX(timeStamp) FROM [table1])
. Altri suggerimenti
Userei il rango () per ottenere il timestamp max e filtrare i # 1s nella clausola WHERE.
select SUM(var1) AS Revenue
From
(SELECT var1
,RANK() OVER (ORDER BY timestamp DESC) as RNK
FROM [table1]
)
where RNK=1
.
Non so come funziona con BQ, ma in altre tecnologie DB sarebbe più efficiente in quanto comporta solo una scansione da tavolo singola anziché 2.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow