我有一張正在增長的記錄表,我希望能夠修改記錄。但是,我希望能夠對每條記錄的所有「最新」版本(最高modified_date
+唯一primary_key
)有一個邏輯視圖。我對GROUP BY
primary_key
的表格嘗試了JOIN
,但這要求整個表格有ORDER BY
modified_date
,這超過了資源。如何根據BigQuery中的特定列去重複記錄?
0
A
回答
1
您可以通過指定PARTITION BY
來避免資源爆炸,然後允許在更細粒度的級別上進行排序。這種模式足夠:
SELECT
*
FROM (
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY primary_key ORDER BY modified_date DESC) seq
FROM
my_table)
WHERE
seq = 1;
0
現在有一個更好的方法來做到這一點。下面是一個例子:
WITH T AS (
SELECT x, y, MOD(y, 2) AS z
FROM UNNEST([5, 4, 3, 2]) AS x WITH OFFSET y
)
SELECT
z,
ARRAY_AGG(x ORDER BY y LIMIT 1)[OFFSET(0)] AS top_x
FROM T
GROUP BY z;
這將返回由一些其它列確定的,由第三列分組的頂部x
值。另一個答案中的查詢可以表示爲:
WITH my_table AS (
SELECT 1 AS primary_key, "foo" AS value, DATE('2016-11-09') AS modified_date UNION ALL
SELECT 1, "bar", DATE('2016-11-10') UNION ALL
SELECT 2, "baz", DATE('2016-01-01')
)
SELECT
row.*
FROM (
SELECT
ARRAY_AGG(t ORDER BY modified_date DESC LIMIT 1)[OFFSET(0)] AS row
FROM my_table AS t
GROUP BY primary_key
);
這將返回與最近的modified_date
關聯的行。理論上,您應該能夠在[OFFSET(0)]
之後直接使用.*
(並且不需要子選擇符),但是我正在研究的列解析似乎存在一個錯誤。
相關問題
- 1. 根據重複記錄的列更新記錄的列
- 2. 消除BigQuery表中的重複記錄
- 3. 根據單個列中的重複值返回記錄(多列)
- 4. 如何計算特定重複記錄的記錄?
- 5. BIGQUERY選擇不重複的記錄
- 6. 如何從數據表中去除連續重複記錄?
- 7. 如何根據數據庫記錄重定向到特定的jsp頁面
- 8. bigquery重複記錄中的數據順序
- 9. 如何從BigQuery表中選擇特定的記錄?
- 10. 我如何根據記錄數組中的字段找到特定的記錄
- 11. 如何根據子查詢中的特定值篩選記錄?
- 12. 在一個特定列的表中計數重複的記錄
- 13. 根據日期重複記錄 - 導軌
- 14. 刪除特定的重複記錄
- 15. 根據另一列的值插入重複記錄
- 16. 如何根據特定列中的最後幾個字符刪除重複項?
- 17. 如何根據特定記錄的偏移量來獲取記錄?
- 18. 如何根據用戶角色訪問特定的db記錄?
- 19. 如何根據特定的月份/年選擇記錄
- 20. SQL根據重複記錄選擇最新記錄
- 21. 如何根據SSN得到重複記錄
- 22. 根據一對列刪除重複記錄?
- 23. 如何根據特定情況重複我的程序?
- 24. BigQuery的SQL如果超過重複記錄
- 25. 如何列出重複記錄?
- 26. SQL:根據自定義標準查找重複記錄
- 27. 如何根據Java EE中的數據庫記錄重寫URL
- 28. Rails 4 - 如何根據條件獲取特定記錄
- 29. 如何根據特定值計算組記錄?
- 30. 去重複多行記錄,用Perl
除此之外,我沒有更好的立即建議。與重複數據刪除不同,另一種考慮問題的方式是,您希望與特定組的最大值關聯的行(由主鍵確定)。語法可能是這樣的:MAX(primary_key RETURNING)。如果您有興趣,我提交了https://code.google.com/p/google-bigquery/issues/detail?id=706。謝謝! –