Google bigquery BigQuery:仅当字段具有特定值时才获取表中的最新行

Google bigquery BigQuery:仅当字段具有特定值时才获取表中的最新行,google-bigquery,Google Bigquery,假设BigQuery中有一个表,其中包含以下数据: ColA | ColB | ColC | ColD x | y | 1 | 5 x | y | 0 | 6 k | z | 1 | 4 ColA,ColB是字符串,ColC是整数,ColD是时间戳 只有当ColC等于1时,我才需要为ColA的每个唯一值获取最新的行(LAST(ColD))。也就是说,在上表中,查询的结果应该是: ColA | ColB | ColC | ColD

假设BigQuery中有一个表,其中包含以下数据:

ColA | ColB | ColC | ColD
  x  |   y  |  1   |   5
  x  |   y  |  0   |   6
  k  |   z  |  1   |   4
ColA,ColB是字符串,ColC是整数,ColD是时间戳

只有当ColC等于1时,我才需要为ColA的每个唯一值获取最新的行(
LAST(ColD)
)。也就是说,在上表中,查询的结果应该是:

ColA | ColB | ColC | ColD
  k  |   z  |  1   |   4
第1行和第2行不应包含在结果中,因为对于
ColA=x
,表中的最后一个条目(第2行)具有
ColC=0


我尝试过使用聚合函数(例如MAX、LAST)和子查询组合进行各种查询,但未能达到预期结果。

SQL标准中分析函数的正确名称是
第一个\u值
FIRST
是BigQuery中的聚合函数

因此,首先,您将获得按时间戳订购的每个可乐的最后一个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
  ColA,
  ColB,
  ColC,
  time
FROM (
--the above query here--)
    where last_Col_C=1

SQL标准中分析函数的正确名称是
FIRST\u VALUE
FIRST
是BigQuery中的聚合函数

因此,首先,您将获得按时间戳订购的每个可乐的最后一个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
  ColA,
  ColB,
  ColC,
  time
FROM (
--the above query here--)
    where last_Col_C=1

谢谢!你完全正确,这就是我需要的。非常感谢!你完全正确,这就是我需要的。