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

PostgreSQL中按时间戳日期匹配将交易表价格映射到价格历史表

PostgreSQL 跨表按日期匹配更新价格字段实现方案

前提表结构说明

本次操作涉及两张数据表:

  • 交易表 transaction:核心字段为 transact_at(timestamp 类型,存储交易精确时间戳)、price(numeric 类型,存储对应交易的价格),其余业务字段不影响本次操作
  • 价格历史表 price_history:核心字段为 record_date(date 类型,对应单日日期,每日仅存在唯一一条记录)、price(numeric 类型,待填充的单日价格字段)

核心更新SQL(默认取当日最后一笔交易价格)

UPDATE price_history ph
SET price = t.daily_price
FROM (
    SELECT
        DATE(transact_at) AS transact_date,
        -- 按交易时间倒序取当日最后一笔交易价格,可按需调整聚合规则
        (array_agg(price ORDER BY transact_at DESC))[1] AS daily_price
    FROM transaction
    GROUP BY DATE(transact_at)
) t
WHERE ph.record_date = t.transact_date;

不同业务场景的规则调整

如果需要其他统计口径的单日价格,可替换上述子查询中的daily_price计算逻辑:

  • 取当日所有交易的平均价格:替换为 AVG(price) AS daily_price
  • 取当日最高交易价格:替换为 MAX(price) AS daily_price
  • 取当日最低交易价格:替换为 MIN(price) AS daily_price
  • 取当日第一笔交易价格:将array_agg的排序规则改为ORDER BY transact_at ASC

注意事项

PostgreSQL 中transaction为内置关键字,如果你的交易表实际命名为transaction,查询时需用双引号包裹表名,即 "transaction"。
如果价格历史表中存在部分日期无对应交易数据的情况,执行上述更新后这些日期的price字段会保留原有值,若需要统一设置为特定值(如0或NULL),可额外执行更新语句处理无匹配的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:30:02