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

多表连接场景下如何按日期筛选用户最新关联记录

解决多表连接后获取每个用户最新Table1记录的问题

你可以使用**ROW_NUMBER()**窗口函数来为每个用户的Table1记录按日期降序编号,筛选出编号为1的记录就能得到每个用户的最新一条数据。

具体查询语句

SELECT userid, Col1, Col2, Col3
FROM (
    SELECT 
        u.userid, 
        Table1.Col1, 
        Table1.Col2, 
        Table1.Col3,
        -- 按用户分组,每条记录按Table1.Date降序编号
        ROW_NUMBER() OVER (PARTITION BY u.UserId ORDER BY Table1.Date DESC) AS rn
    FROM Table1
    JOIN Table2 ON Table2.PK = Table1.FK
    JOIN [User] u ON Table2.UserId = u.UserId
    WHERE u.UserId IN (2,4,6,7,10,11,12,8,5)
) AS ranked
-- 只保留每个用户的第一条(最新)记录
WHERE rn = 1;

逻辑说明

  • PARTITION BY u.UserId:将数据按用户ID分组,每个用户的记录单独排序
  • ORDER BY Table1.Date DESC:在每个用户组内,按Table1的日期从新到旧排序
  • ROW_NUMBER():为每个组内的记录分配序号,最新的记录序号为1
  • 外层查询筛选rn=1的记录,即可得到每个用户对应的最新Table1数据

替代方法(关联子查询)

如果你的SQL版本不支持窗口函数,也可以用关联子查询获取每个用户的最新日期,再关联回原表:

SELECT u.userid, Table1.Col1, Table1.Col2, Table1.Col3
FROM Table1
JOIN Table2 ON Table2.PK = Table1.FK
JOIN [User] u ON Table2.UserId = u.UserId
WHERE u.UserId IN (2,4,6,7,10,11,12,8,5)
AND Table1.Date = (
    SELECT MAX(t1.Date)
    FROM Table1 t1
    JOIN Table2 t2 ON t2.PK = t1.FK
    WHERE t2.UserId = u.UserId
);

这种方法通过子查询找到每个用户的最新Table1日期,再匹配对应的记录,适合不支持窗口函数的老版本SQL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:47:10