BigQuery:仅当字段具有特定值时才获取 table 中的最新行
BigQuery: Get latest row in a table only if a field has a specific value
假设我们在 BigQuery 中有一个 table,其中包含以下数据:
ColA | ColB | ColC | ColD
x | y | 1 | 5
x | y | 0 | 6
k | z | 1 | 4
ColA、ColB 是字符串,ColC 是整数和 ColD 时间戳。
我需要为 ColA 的每个唯一值获取最新行 (LAST(ColD)
) 仅当 ColC 等于 1 时。也就是说,在上面 table,查询结果应该是:
ColA | ColB | ColC | ColD
k | z | 1 | 4
第 1 行和第 2 行不应包含在结果中,因为对于 ColA=x
,table(第 2 行)中的最后一个条目具有 ColC=0
.
我尝试过使用聚合函数(例如 MAX、LAST)结合子查询进行各种查询,但无法获得所需的结果。
SQL 标准中解析函数的正确名称是 FIRST_VALUE
。 FIRST
是 BigQuery 中的聚合函数
因此,首先您获得按时间戳排序的每个 ColA 的最后一个 ColC
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)
然后你进一步 select 你感兴趣的东西,最终查询看起来像:
SELECT
ColA,
ColB,
ColC,
time
FROM (
--the above query here--)
where last_Col_C=1
假设我们在 BigQuery 中有一个 table,其中包含以下数据:
ColA | ColB | ColC | ColD
x | y | 1 | 5
x | y | 0 | 6
k | z | 1 | 4
ColA、ColB 是字符串,ColC 是整数和 ColD 时间戳。
我需要为 ColA 的每个唯一值获取最新行 (LAST(ColD)
) 仅当 ColC 等于 1 时。也就是说,在上面 table,查询结果应该是:
ColA | ColB | ColC | ColD
k | z | 1 | 4
第 1 行和第 2 行不应包含在结果中,因为对于 ColA=x
,table(第 2 行)中的最后一个条目具有 ColC=0
.
我尝试过使用聚合函数(例如 MAX、LAST)结合子查询进行各种查询,但无法获得所需的结果。
SQL 标准中解析函数的正确名称是 FIRST_VALUE
。 FIRST
是 BigQuery 中的聚合函数
因此,首先您获得按时间戳排序的每个 ColA 的最后一个 ColC
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)
然后你进一步 select 你感兴趣的东西,最终查询看起来像:
SELECT
ColA,
ColB,
ColC,
time
FROM (
--the above query here--)
where last_Col_C=1