假设我们在BigQuery中有一个包含以下数据的表:
ColA | ColB | ColC | ColD
x | y | 1 | 5
x | y | 0 | 6
k | z | 1 | 4
ColA,ColB是String,ColC是Integer和ColD时间戳。
我需要获取ColA 的每个唯一值的最新行(LAST(ColD)
),仅当 ColC等于1.即,在上表中,结果为查询应该是:
ColA | ColB | ColC | ColD
k | z | 1 | 4
第1行和第2行不应包含在结果中,因为对于ColA=x
,表格中的最后一个条目(第2行)具有ColC=0
。
我尝试使用聚合函数(例如MAX,LAST)结合子查询进行各种查询,但无法达到所需的结果。
答案 0 :(得分:4)
SQL Standard中分析函数的正确名称是public function onAuthSuccess($client)
{
print_r('in'); exit;
$attributes = $client->getUserAttributes();
}
。 FIRST_VALUE
是BigQuery中的聚合函数
首先,您获得按时间戳排序的每个ColA的最后一个ColC
FIRST
然后您进一步选择您感兴趣的内容,最终查询如下:
SELECT
ColA,
ColB,
ColC,
time,
FIRST_VALUE(ColC) OVER (PARTITION BY ColA ORDER BY time DESC) AS last_Col_C
FROM (
SELECT
'x' AS ColA,
'y' AS ColB,
1 AS ColC,
5 AS time),
(
SELECT
'x' AS ColA,
'y' AS ColB,
0 AS ColC,
6 AS time),
(
SELECT
'k' AS ColA,
'z' AS ColB,
1 AS ColC,
4 AS time)