我有一个包含许多重复项目的表 - 许多行具有相同的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,设置目标表,并指定不展平结果(如果您的模式具有重复字段)。