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

SQL中如何获取同一时间段下各记录的最新版本?

获取时间段记录的最新版本

我有一张包含时间段(from_date和to_date列)及关联值的表,需要获取其中的最新记录。难点在于,随着时间推移的更新,同一时间段存在多个版本,每条记录包含用于确定版本的creation_date字段。

表结构

CREATE TABLE tab (
    id INTEGER, 
    from_date DATE,
    to_date DATE,
    creation_date TIMESTAMP,
    value INTEGER,
    from_timestamp TIMESTAMP,
    to_timestamp TIMESTAMP
);

示例数据

idfrom_dateto_datecreation_datevaluefrom_timestampto_timestamp
12014-10-019999-12-312014-10-01 10:00:051002014-10-01 00:00:009999-12-31 00:00:00
22014-10-012016-08-102015-10-01 10:00:051002014-10-01 00:00:002016-08-11 00:00:00
32016-08-119999-12-312015-10-01 10:00:051202016-08-11 00:00:009999-12-31 00:00:00
42014-10-019999-12-312016-10-01 10:00:051002014-10-01 00:00:009999-12-31 00:00:00
52014-10-019999-12-312017-10-01 10:00:052002014-10-01 00:00:009999-12-31 00:00:00
62014-10-012016-08-102018-10-01 10:00:052002014-10-01 00:00:002016-08-11 00:00:00
72016-08-119999-12-312018-10-01 10:00:053002016-08-11 00:00:009999-12-31 00:00:00
82014-10-012016-09-102019-10-01 10:00:052002014-10-01 00:00:002016-09-11 00:00:00
92016-09-112021-01-202019-10-01 10:00:053002016-09-11 00:00:002021-01-21 00:00:00
102021-01-219999-12-312019-10-01 10:00:053502021-01-21 00:00:009999-12-31 00:00:00

业务更新逻辑

  • 初始时,时间段2014-10-01至9999-12-31被赋值100(id 1)。
  • 随后拆分时间段:2014-10-01至2016-08-10赋值100,2016-08-11至9999-12-31赋值120(id 2和3)。
  • 之后再次合并时间段2014-10-01至9999-12-31并赋值100(id 4)。
  • 接着,该合并时间段被更新为200(id 5)。
  • 再次拆分时间段:2014-10-01至2016-08-10更新为200,2016-08-11至9999-12-31更新为300(id 6-7)。
  • 最后调整时间段拆分:2014-10-01至2016-09-10赋值200;2016-09-11至2021-01-20赋值300;2021-01-21至9999-12-31赋值350(id 8-10)。

需求与已尝试方法

需求:编写查询语句,返回记录的最新版本。
已尝试方法:使用ROW_NUMBER()函数结合PARTITION BY,按from_date和to_date对记录进行分区,但未成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:25:54