我有一個包含許多重複項目的表 - 許多行具有相同的id
,可能唯一的區別是requested_at
列。僅返回BigQuery表中具有重複項目的最新行
我想從表格中做一個select *
,但只返回與最近請求的id
相同的一行。
我已經調查過group by id
但我需要爲每列做一個聚合。這很容易與requested_at
- max(requested_at) as requested_at
- 但其他人是艱難的。
我如何確保我得到title
等與最近更新的行對應的值?
我有一個包含許多重複項目的表 - 許多行具有相同的id
,可能唯一的區別是requested_at
列。僅返回BigQuery表中具有重複項目的最新行
我想從表格中做一個select *
,但只返回與最近請求的id
相同的一行。
我已經調查過group by id
但我需要爲每列做一個聚合。這很容易與requested_at
- max(requested_at) as requested_at
- 但其他人是艱難的。
我如何確保我得到title
等與最近更新的行對應的值?
我建議類似的形式避免了窗口函數排序:
SELECT *
FROM (
SELECT
*,
MAX(<timestamp_column>)
OVER (PARTITION BY <id_column>)
AS max_timestamp,
FROM <table>
)
WHERE <timestamp_column> = max_timestamp
嘗試這樣:
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,設置目標表,並指定不展平結果(如果您的模式具有重複字段)。