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

按ID统计实例数量并获取最后出现记录的SQL实现需求

解决按ID统计实例数量并获取最后出现记录的SQL方案

嘿,我来帮你搞定这个SQL需求!针对你的exports表,要同时实现按ID统计实例数量和获取每个ID的最后出现记录,这里有两种实用的方案,适配不同的数据库场景:

方案一:用窗口函数(推荐,高效且逻辑清晰)

这个方案适合支持窗口函数的数据库(比如MySQL 8+、PostgreSQL、SQL Server等),一步到位就能拿到你要的结果:

WITH id_stats AS (
    SELECT 
        *,
        -- 按ID分区,统计每个ID对应的总实例数
        COUNT(*) OVER (PARTITION BY id) AS instance_count,
        -- 给每个ID的记录按时间倒序排号,rn=1就是最后出现的那条
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY record_time DESC) AS rn
    FROM exports
)
SELECT 
    id,
    instance_count,
    -- 这里替换成你需要的最后记录的业务字段
    content,
    status,
    record_time AS last_appear_time
FROM id_stats
WHERE rn = 1;

说明:

  • 临时结果集id_stats会给每个ID的所有记录都带上该ID的总实例数,同时给每条记录按时间倒序编号。
  • 最后筛选rn=1的行,就得到了每个ID的最新记录和对应的实例总数。
  • 如果你的表用自增主键(比如seq_id)判断最新记录,把ORDER BY record_time DESC换成ORDER BY seq_id DESC就行。

方案二:分组关联(兼容老版本数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以用分组+关联的方式实现:

SELECT 
    e.id,
    s.instance_count,
    e.content,
    e.status,
    e.record_time AS last_appear_time
FROM exports e
INNER JOIN (
    -- 先按ID分组,统计数量并拿到每个ID的最新时间
    SELECT 
        id,
        COUNT(*) AS instance_count,
        MAX(record_time) AS last_appear_time
    FROM exports
    GROUP BY id
) s ON e.id = s.id AND e.record_time = s.last_appear_time;

注意:

  • 如果同一个ID在同一时间有多条记录,这个查询会返回多条结果。如果需要唯一的最后记录,可以在子查询里加上MAX(seq_id)(假设seq_id是自增主键),然后关联时加上e.seq_id = s.max_seq_id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:47:35