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

时间:2015-08-12 08:06:22

标签: google-bigquery

假设我们在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)结合子查询进行各种查询,但无法达到所需的结果。

1 个答案:

答案 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)