多表关联SQL查询:提取Table B中记录数超10的用户最新10条数据
解决方案:筛选高记录数用户的最新10条业务记录
思路拆解
- 先统计每个用户在
TableB中的总记录数,筛选出记录数超过10条的用户ID - 对这些用户的
TableB记录按日期倒序排序,为每条记录编号,取编号≤10的记录 - 关联
TableA获取用户名称信息
实现代码(以MySQL为例)
SELECT a.ID, a.名称, b.* FROM TableA a JOIN ( -- 给符合条件的用户记录添加行号 SELECT tb.*, ROW_NUMBER() OVER (PARTITION BY tb.UserCreated_FK ORDER BY tb.日期列 DESC) AS rn FROM TableB tb JOIN ( -- 筛选出记录数超过10条的用户 SELECT UserCreated_FK FROM TableB GROUP BY UserCreated_FK HAVING COUNT(*) > 10 ) user_filter ON tb.UserCreated_FK = user_filter.UserCreated_FK ) b ON a.ID = b.UserCreated_FK WHERE b.rn <= 10 ORDER BY a.ID, b.日期列 DESC;
代码说明
- 内层子查询
user_filter:统计每个用户的业务记录总量,仅保留记录数大于10的用户ID - 中间层子查询:按用户分组、日期倒序给记录加行号,行号
rn=1代表该用户的最新记录 - 外层查询:关联
TableA拿到用户名称,筛选行号≤10的结果,即每个达标用户的最新10条业务记录
适配提示
- 若是Oracle、SQL Server等数据库,语法逻辑完全通用,只需确认日期列的排序方向符合业务需求
- 若
日期列包含时间戳,倒序排序可精准定位最新记录;仅存日期值时,可根据实际业务补充排序字段
内容的提问来源于stack exchange,提问作者user20220054
相关产品推荐
相关产品推荐

