2015-12-08 41 views
5

我有一個包含許多重複項目的表 - 許多行具有相同的id,可能唯一的區別是requested_at列。僅返回BigQuery表中具有重複項目的最新行

我想從表格中做一個select *,但只返回與最近請求的id相同的一行。

我已經調查過group by id但我需要爲每列做一個聚合。這很容易與requested_at - max(requested_at) as requested_at - 但其他人是艱難的。

我如何確保我得到title等與最近更新的行對應的值?

回答

7

我建議類似的形式避免了窗口函數排序:

SELECT * 
    FROM (
     SELECT 
      *, 
      MAX(<timestamp_column>) 
       OVER (PARTITION BY <id_column>) 
       AS max_timestamp, 
     FROM <table> 
    ) 
    WHERE <timestamp_column> = max_timestamp 
2

嘗試這樣:

SELECT * 
    FROM (
     SELECT 
      *, 
      ROW_NUMBER() 
       OVER (
        PARTITION BY <id_column> 
        ORDER BY <timestamp column> DESC) 
       row_number, 
     FROM <table> 
    ) 
    WHERE row_number = 1 

注意它會加入row_number列,你可能不希望。要解決這個問題,您可以在外部select語句中按名稱選擇各個列。

就你而言,這聽起來像requested_at列是你想要在ORDER BY中使用的列。

而且,您還希望使用allow_large_results,設置目標表,並指定不展平結果(如果您的模式具有重複字段)。

相關問題