Return 只有 BigQuery 中的最新行 table 具有重复项
Return only the newest rows from a BigQuery table with a duplicate items
我有一个 table,其中有许多重复的项目 – 许多行具有相同的 id
,可能唯一的区别是 requested_at
列。
我想从 table 做一个 select *
,但只有 return 一行具有相同的 id
– 最近请求的。
我已经查看了 group by id
,但我需要对每一列进行汇总。 requested_at
- max(requested_at) as requested_at
这很容易 - 但其他人很难。
我如何确保获得与最近更新的行相对应的 title
等值?
尝试这样的事情:
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 语句中按名称 select 各个列。
在您的情况下,requested_at
列听起来像是您想在 ORDER BY
中使用的列。
而且,您还需要使用 allow_large_results,设置目标 table,并指定不对结果进行扁平化(如果您的架构包含重复字段)。
我建议使用类似的形式来避免 window 函数中的排序:
SELECT *
FROM (
SELECT
*,
MAX(<timestamp_column>)
OVER (PARTITION BY <id_column>)
AS max_timestamp,
FROM <table>
)
WHERE <timestamp_column> = max_timestamp
我有一个 table,其中有许多重复的项目 – 许多行具有相同的 id
,可能唯一的区别是 requested_at
列。
我想从 table 做一个 select *
,但只有 return 一行具有相同的 id
– 最近请求的。
我已经查看了 group by id
,但我需要对每一列进行汇总。 requested_at
- max(requested_at) as requested_at
这很容易 - 但其他人很难。
我如何确保获得与最近更新的行相对应的 title
等值?
尝试这样的事情:
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 语句中按名称 select 各个列。
在您的情况下,requested_at
列听起来像是您想在 ORDER BY
中使用的列。
而且,您还需要使用 allow_large_results,设置目标 table,并指定不对结果进行扁平化(如果您的架构包含重复字段)。
我建议使用类似的形式来避免 window 函数中的排序:
SELECT *
FROM (
SELECT
*,
MAX(<timestamp_column>)
OVER (PARTITION BY <id_column>)
AS max_timestamp,
FROM <table>
)
WHERE <timestamp_column> = max_timestamp