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

如何按user_id分组获取各用户最新complete_date对应的完整行

解决按用户分组获取最新日期完整行的SQL问题

你的原查询报错,是因为SQL标准要求SELECT中的非聚合列必须出现在GROUP BY子句中。如果强行把bill_id加入GROUP BY,会按(user_id, bill_id)组合分组,结果就会和原表几乎一致,完全达不到需求。下面是几种可行的修改方案:

方法1:窗口函数(推荐,通用现代SQL写法)

利用ROW_NUMBER()窗口函数给每个用户的记录按日期倒序排序,筛选出排序第一的行(即最新日期的记录):

SELECT user_id, bill_id, complete_date
FROM (
    SELECT 
        user_id, 
        bill_id, 
        complete_date,
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY complete_date DESC) AS rn
    FROM tbl_user_complete
) t
WHERE rn = 1;
  • PARTITION BY user_id:按用户ID分组
  • ORDER BY complete_date DESC:每个组内按完成日期倒序排列
  • rn = 1:取每个组内排序第一的记录,也就是该用户最新的那条账单

方法2:子查询关联

先获取每个用户的最大完成日期,再通过关联原表拿到对应的完整行:

SELECT t1.user_id, t1.bill_id, t1.complete_date
FROM tbl_user_complete t1
INNER JOIN (
    SELECT user_id, MAX(complete_date) AS max_date
    FROM tbl_user_complete
    GROUP BY user_id
) t2 ON t1.user_id = t2.user_id AND t1.complete_date = t2.max_date;

如果同一个用户存在多条相同最大日期的记录,这个方法会返回所有符合的行;若需仅返回一行,优先选择方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:33:25