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

如何查询timestamp小于指定值的实体最新修订版本

实现按最大Timestamp筛选实体最新修订版本的查询方案

假设你的实体修订记录表包含entity_id(实体唯一标识)、revision_data(修订内容字段)、timestamp(时间戳字段),要实现传入最大timestamp(示例为180)后,返回每个实体timestamp小于该值的最新修订版本,可以用以下两种主流SQL方案:

方案一:窗口函数(推荐,逻辑直观)

利用ROW_NUMBER()窗口函数按实体分组并按时间戳倒序排序,筛选每组的第一条记录:

WITH ranked_revisions AS (
    SELECT 
        entity_id,
        revision_data,
        timestamp,
        -- 按实体分组,组内按时间戳降序编号,最新版本编号为1
        ROW_NUMBER() OVER (PARTITION BY entity_id ORDER BY timestamp DESC) AS revision_rank
    FROM entity_revisions
    WHERE timestamp < 180
)
SELECT entity_id, revision_data, timestamp
FROM ranked_revisions
WHERE revision_rank = 1;

如果同一实体在同一时间戳存在多个修订版本,需要保留所有同时间版本的话,可将ROW_NUMBER()替换为RANK()或DENSE_RANK()。

方案二:子查询关联

先查询每个实体符合时间条件的最大时间戳,再关联原表获取对应记录:

SELECT er.entity_id, er.revision_data, er.timestamp
FROM entity_revisions er
INNER JOIN (
    -- 先找出每个实体满足timestamp < 180的最大时间戳
    SELECT entity_id, MAX(timestamp) AS latest_valid_ts
    FROM entity_revisions
    WHERE timestamp < 180
    GROUP BY entity_id
) latest_rev ON er.entity_id = latest_rev.entity_id AND er.timestamp = latest_rev.latest_valid_ts;

这个方案在部分数据库引擎上的性能可能优于窗口函数,适合数据量较大的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:55:48