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

SQL查询:按姓名提取各季度最新数据(取最大ID记录)

问题描述

我数据库中有如下表格:

IDNameQuarterValue
1Martin1100
2Smith1110
3Doe1115
4Martin2110
5Smith2110
6Doe2115
7Martin2115
8Smith2110
9Doe2115
10Martin3120
11Smith3115
12Doe3115

需要按Name提取每个Quarter对应的Value值。由于表格来自SQL插入的dump结果,可能存在同一Name同一Quarter的重复记录(Name固定,Value可能变化),因此需要获取每个Name各Quarter的最新数据——即对应ID最大的记录。例如表中Quarter 2的重复记录,需提取ID为7、8、9的那组数据。求实现该需求的单条SQL语句。

解决方案

方法1:窗口函数写法(推荐,适配多数现代数据库)

用ROW_NUMBER()窗口函数按Name和Quarter分组,再按ID倒序排序,取每组第一条即可:

SELECT ID, Name, Quarter, Value
FROM (
    SELECT 
        ID, Name, Quarter, Value,
        ROW_NUMBER() OVER (PARTITION BY Name, Quarter ORDER BY ID DESC) AS rn
    FROM your_table_name
) t
WHERE rn = 1;

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

先子查询找出每个Name+Quarter组合的最大ID,再关联原表拉取对应记录:

SELECT t1.ID, t1.Name, t1.Quarter, t1.Value
FROM your_table_name t1
INNER JOIN (
    SELECT Name, Quarter, MAX(ID) AS max_id
    FROM your_table_name
    GROUP BY Name, Quarter
) t2 ON t1.Name = t2.Name 
    AND t1.Quarter = t2.Quarter 
    AND t1.ID = t2.max_id;

注意:把语句里的your_table_name替换成你实际的表名就行。两种方法都能精准拿到目标数据,窗口函数写法更简洁好读,子查询则适合不支持窗口函数的老版本数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:33:13