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

如何获取每个用户对应最新Timestamp的Rating数据?

获取用户最新Rating数据的解决方案

原始数据

+--------+-----------+--------+
| UserId | Timestamp | Rating |
+--------+-----------+--------+
|      1 |         1 |   1202 |
|      2 |         1 |   1198 |
|      1 |         2 |   1204 |
|      2 |         2 |   1196 |
|      1 |         3 |   1206 |
|      2 |         3 |   1194 |
|      1 |         4 |   1198 |
|      2 |         4 |   1202 |
+--------+-----------+--------+

需求目标

提取每个用户最新(Timestamp值最大)的Rating数据,最终结果格式如下:

+--------+--------+
| UserId | Rating |
+--------+--------+
|      1 |   1198 |
|      2 |   1202 |
+--------+--------+

可行解决方案

不用纠结LIMIT的常量限制,直接用以下两种更高效的方式获取目标数据:

方法1:窗口函数(推荐,适用于MySQL 8.0+、PostgreSQL、SQL Server等)

利用ROW_NUMBER()窗口函数给每个用户的记录按时间戳降序编号,筛选编号为1的行即可:

SELECT UserId, Rating
FROM (
    SELECT 
        UserId, 
        Rating,
        -- 按用户分组,组内按时间戳降序标序号
        ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY Timestamp DESC) AS rn
    FROM your_table_name
) t
WHERE rn = 1;

方法2:子查询关联(兼容旧版本数据库)

先获取每个用户的最大时间戳,再关联原表匹配对应评分:

SELECT t1.UserId, t1.Rating
FROM your_table_name t1
JOIN (
    -- 先找出每个用户的最新时间戳
    SELECT UserId, MAX(Timestamp) AS max_ts
    FROM your_table_name
    GROUP BY UserId
) t2 ON t1.UserId = t2.UserId AND t1.Timestamp = t2.max_ts;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:30:41