【问题标题】:Bigquery - select last # distinct valuesBigquery - 选择最后 # 个不同的值
【发布时间】:2020-10-01 23:08:27
【问题描述】:

给定表格:

WITH table AS
(SELECT 'A' id, '11' ar, 1 ts   UNION ALL
SELECT 'A', '12', 2 UNION ALL
SELECT 'A', '11', 3 UNION ALL
SELECT 'B', '11', 4 UNION ALL
SELECT 'B', '13', 5 UNION ALL
SELECT 'B', '12', 6 UNION ALL
SELECT 'B', '12', 7)


id  ar  ts
A   11  1
A   12  2
A   11  3
B   11  4
B   13  5
B   12  6
B   12  7

我需要得到唯一的最后两行:

id  ar
A   11
A   12
B   12
B   13

我用DISTINCTLIMIT 尝试了ARRAY_AGG

但是ORDER BY必须和表达式一样

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT * EXCEPT(ars) 
    FROM (
      SELECT id, ARRAY_AGG(ar ORDER BY ts DESC LIMIT 2) AS ars
      FROM (
        SELECT id, ar, MAX(ts) AS ts 
        FROM `project.dataset.table`
        GROUP BY id, ar
      )
      GROUP BY id
    ) t, t.ars AS ar   
    

    如果应用于您问题中的样本数据 - 输出是

    Row id  ar   
    1   A   11   
    2   A   12   
    3   B   12   
    4   B   13   
    

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 2021-01-13
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 2011-05-09
      相关资源
      最近更新 更多