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

如何通过单条SQL查询获取各用户最新日期对应的number值

解答

这个需求完全可以通过单条SQL实现,以下是两种常用实现方案,你可以根据自己使用的数据库版本选择:
假设你的业务表名为biz_data,三个字段分别为number(数值字段)、date(日期字段)、user(用户字段,注意user是SQL标准关键字,实际查询时建议根据你用的数据库加转义符,比如MySQL用反引号包裹、PostgreSQL用双引号包裹避免语法错误)。

  • 窗口函数实现(推荐,适配MySQL 8.0+、PostgreSQL、SQL Server、ClickHouse等绝大多数支持窗口函数的数据库,性能更优)
    核心逻辑是按用户维度分区,每个分区内按日期倒序排序,取每个分区排第一的记录即可:
SELECT
  `user`,
  `number` AS latest_number
FROM (
  SELECT
    `user`,
    `number`,
    ROW_NUMBER() OVER (PARTITION BY `user` ORDER BY `date` DESC) AS rank_num
  FROM biz_data
) filtered
WHERE rank_num = 1;

注意:如果同一个用户存在多条记录的日期完全相同、且都是该用户的最新日期,ROW_NUMBER()会随机返回其中一条的number值;如果需要返回该日期下所有的number,可以把ROW_NUMBER()替换为RANK()。

  • 子查询关联实现(兼容不支持窗口函数的老版本数据库,比如MySQL 5.x)
    核心逻辑是先聚合算出每个用户对应的最新日期,再关联原表取出对应日期的number值:
SELECT
  t1.`user`,
  t1.`number` AS latest_number
FROM biz_data t1
JOIN (
  SELECT
    `user`,
    MAX(`date`) AS latest_date
  FROM biz_data
  GROUP BY `user`
) t2
ON t1.`user` = t2.`user` AND t1.`date` = t2.latest_date;

针对你给出的示例数据,上述两种写法查询用户A的返回结果都是你预期的9;面对多用户的业务场景,两种写法都会自动完成用户去重,返回每个用户对应最新日期的number值,不需要额外做循环或者分批处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:24:30