You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中如何正确获取分区第二行?我的Row_Number查询异常

BigQuery去重:按tid取最新created_date记录的问题分析

两种写法的问题所在

  • 第一种:仅按tid分区但行号顺序错误
    大概率是你在ORDER BY里用了ASC升序,或者没指定正确的排序字段。比如如果写的是:

    ROW_NUMBER() OVER(PARTITION BY tid ORDER BY created_date ASC) AS rn
    

    升序排序会把最早的created_date标记为行号1,而你要的是最新的,自然顺序反了。另外如果没指定created_date作为排序字段,BigQuery会用默认的无序排序,导致行号混乱。

  • 第二种:按tid和created_date分区
    这种分区方式等于把每个tid+created_date的组合当成一个独立分组,同一个组合里的所有行都会被标记为行号1,完全起不到筛选最新记录的作用——因为你要的是每个tid下最新的created_date,而不是每个tid+日期的组内去重。

正确的写法

你需要用PARTITION BY tid来按tid分组,然后用ORDER BY created_date DESC把最新的日期排在最前面,最后筛选行号为1的记录:

WITH ranked_data AS (
  SELECT 
    *,
    ROW_NUMBER() OVER(PARTITION BY tid ORDER BY created_date DESC) AS rn
  FROM your_table_name
)
SELECT * EXCEPT(rn)
FROM ranked_data
WHERE rn = 1;

特殊情况处理

如果同一个tid下有多个行的created_date完全相同(比如同一时间更新了fmid),你可以再加一个排序字段确保唯一,比如按fmid或者最后修改时间排序:

ROW_NUMBER() OVER(PARTITION BY tid ORDER BY created_date DESC, fmid DESC) AS rn

内容的提问来源于stack exchange,提问作者thiagole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:22:04