gbqsql:查找x的示例并拉取相应的行数据

o3imoua4  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(311)

我有一个表,记录每个位置每个id的历史记录。此表每天更新,以跟踪某一行(id)中任何更改的历史记录。注意:日期字段不是按时间顺序排列的。

ID   Location   Count   Date (datetime type)
1    A          20      2020-01-15T12:00:00.000
1    A          10      2020-04-15T12:00:00.000
1    A          15      2020-03-15T12:00:00.000
1    B          10      2020-05-15T12:00:00.000
1    B          5       2020-06-15T12:00:00.000
1    B          0       2020-07-15T12:00:00.000
2    A          18      2020-01-15T12:00:00.000
2    A          0       2020-04-15T12:00:00.000
2    A          14      2020-03-15T12:00:00.000
2    B          10      2020-05-15T12:00:00.000
2    B          5       2020-06-15T12:00:00.000
2    B          1       2020-07-15T12:00:00.000

对于每个唯一的id,我需要在计数值为零时提取第一个示例(最早的日期)。如果一个惟一的id没有一个其计数值为零的示例,我需要提取最新的计数值。
下面是我的结果:

ID   Location   Count   Date (datetime type)
1    A          10      2020-04-15T12:00:00.000
1    B          0       2020-07-15T12:00:00.000
2    A          0       2020-04-15T12:00:00.000
2    B          1       2020-07-15T12:00:00.000

我似乎不知道如何在googlebigquery中编写代码。

l7mqbcuq

l7mqbcuq1#

下面是bigquery标准sql


# standardSQL

SELECT AS VALUE
  CASE COUNTIF(count = 0) 
    WHEN 0 THEN ARRAY_AGG(t ORDER BY date DESC LIMIT 1)
    ELSE ARRAY_AGG(t ORDER BY count, date LIMIT 1)
  END [OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY id, location

如果要应用到问题输出的样本数据

Row id  location    count   date     
1   1   A   10      2020-04-15 12:00:00 UTC  
2   1   B   0       2020-07-15 12:00:00 UTC  
3   2   A   0       2020-04-15 12:00:00 UTC  
4   2   B   1       2020-07-15 12:00:00 UTC

相关问题