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

求助:如何获取同组重复记录中最新的Usage字段值

解决方法:获取每组最新记录的Usage值

你原来的SQL问题在于:将Usage加入GROUP BY后,数据库会把不同Usage值的行视为不同分组,所以会返回所有行;而如果不加入Usage,直接在SELECT里引用它,不符合SQL的分组聚合规则(非聚合列必须出现在GROUP BY中)。

下面提供两种可靠的解决方式:

方法1:使用窗口函数(推荐,适用于支持SQL:2003及以上的数据库,如SQL Server、MySQL 8+、PostgreSQL等)

利用ROW_NUMBER()窗口函数,按Name和Color分组,对每组内的行按Entry降序排序,标记出每组的第一条(即Entry最大的记录),再筛选出这些记录:

WITH RankedEntries AS (
    SELECT 
        Entry,
        Name,
        Color,
        Usage,
        ROW_NUMBER() OVER (PARTITION BY Name, Color ORDER BY Entry DESC) AS rn
    FROM ColorUsage
)
SELECT Name, Color, Usage
FROM RankedEntries
WHERE rn = 1;

解释:

  • PARTITION BY Name, Color:将数据按Name和Color分成不同的组
  • ORDER BY Entry DESC:每组内按Entry从大到小排序,最新的记录排在第一位
  • rn = 1:筛选出每组的第一条记录,也就是最新的那条

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

先通过子查询获取每组Name, Color对应的最大Entry,再将这个结果和原表关联,获取对应的Usage值:

SELECT cu.Name, cu.Color, cu.Usage
FROM ColorUsage cu
INNER JOIN (
    SELECT Name, Color, MAX(Entry) AS MaxEntry
    FROM ColorUsage
    GROUP BY Name, Color
) max_entries 
ON cu.Name = max_entries.Name 
AND cu.Color = max_entries.Color 
AND cu.Entry = max_entries.MaxEntry;

解释:

  • 子查询max_entries:计算每组Name, Color的最大Entry值
  • 内连接原表:通过Name, Color, Entry匹配,找到对应最大Entry的那条记录的Usage

这两种方法都能得到你想要的结果:

A, Red, 1.5  
B, Blue, 0.6  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:27:36