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

BigQuery左连接取最新时间activity字段的SQL实现请求

BigQuery 左连接获取用户最新活动记录的SQL实现

针对你的需求,这里提供两种在BigQuery中实现的方案,核心都是先筛选出表2中每个userId的最新时间记录,再与表1左连接:

方案1:使用ROW_NUMBER() + 子查询

先通过窗口函数给表2的用户记录按时间降序编号,取编号为1的最新记录,再关联表1:

WITH latest_activity AS (
    SELECT 
        userId,
        activity,
        time,
        -- 按用户分组,时间倒序排序,最新记录编号为1
        ROW_NUMBER() OVER (PARTITION BY userId ORDER BY time DESC) AS rn
    FROM 表2
)
SELECT 
    t1.userId,
    t1.age,
    la.activity,
    la.time
FROM 表1 t1
LEFT JOIN latest_activity la 
    ON t1.userId = la.userId 
    AND la.rn = 1;

方案2:使用BigQuery专属QUALIFY子句

QUALIFY可以直接在查询中过滤窗口函数的结果,写法更简洁:

SELECT 
    t1.userId,
    t1.age,
    t2.activity,
    t2.time
FROM 表1 t1
LEFT JOIN (
    SELECT 
        userId,
        activity,
        time
    FROM 表2
    -- 直接筛选出每个用户的最新记录
    QUALIFY ROW_NUMBER() OVER (PARTITION BY userId ORDER BY time DESC) = 1
) t2 ON t1.userId = t2.userId;

注意事项

  • 确保time字段为可排序类型(如TIMESTAMP、DATETIME),保证排序逻辑正确;
  • 若表2中无对应userId的记录,activity和time字段会返回NULL,符合左连接保留表1全部数据的要求;
  • 如果同一用户同一时间有多条活动记录,ROW_NUMBER()会随机取其中一条,若需保留所有同时间的最新记录,可替换为RANK()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:47:04