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

如何从单表按CLASS_ID分组获取基于ENTRY_ID的最新规则记录

嘿,我懂你遇到的问题了——之前找的「为不同条目取最新记录」的方案,大概率只帮你拿到了每个CLASS_ID对应的最大ENTRY_ID,但没法把表中其他字段(比如TIMESTAMP、USER_ID这些)一起带出来,对吧?这确实是个常见的小坑,我给你几个实用的SQL方案,都能搞定这个需求:

解决方案:提取每个CLASS_ID的最新完整规则记录

这里的「最新」定义为对应CLASS_ID下最大的ENTRY_ID,以下方法都能帮你取出该记录的所有字段:

方法1:窗口函数法(推荐)

这是最直观高效的方案,适合支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)。用ROW_NUMBER()给每个CLASS_ID分组内的记录按ENTRY_ID降序排序,取排序为1的那条就是最新记录:

SELECT *
FROM (
    SELECT 
        ENTRY_ID,
        TIMESTAMP,
        USER_ID,
        CLASS_ID,
        PRICE_POINT,
        -- 按CLASS_ID分组,组内按ENTRY_ID从大到小排,第一条标记为1
        ROW_NUMBER() OVER (PARTITION BY CLASS_ID ORDER BY ENTRY_ID DESC) AS row_rank
    FROM your_table_name -- 替换成你的实际表名
) AS ranked_records
WHERE row_rank = 1;

如果存在多个ENTRY_ID相同的极端情况(比如ENTRY_ID不是自增主键),可以把ROW_NUMBER()换成RANK(),这样会保留所有ENTRY_ID等于最大值的记录。

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

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以先通过子查询拿到每个CLASS_ID的最大ENTRY_ID,再和原表关联匹配完整记录:

SELECT t.*
FROM your_table_name t
INNER JOIN (
    -- 先获取每个CLASS_ID对应的最大ENTRY_ID
    SELECT CLASS_ID, MAX(ENTRY_ID) AS max_entry_id
    FROM your_table_name
    GROUP BY CLASS_ID
) AS max_id_map 
ON t.CLASS_ID = max_id_map.CLASS_ID AND t.ENTRY_ID = max_id_map.max_entry_id;

这种方法兼容性拉满,但数据量极大时性能会略逊于窗口函数,因为需要两次扫描表。

方法3:单CLASS_ID快速查询(适合单个分组场景)

如果只是查询某一个CLASS_ID的最新记录,用这个极简写法就够了:

SELECT *
FROM your_table_name
WHERE CLASS_ID = 53 -- 替换成目标CLASS_ID
ORDER BY ENTRY_ID DESC
LIMIT 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:58