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

PostgreSQL实现年度订阅订单按月拆分均摊金额SQL查询

PostgreSQL 年付订阅订单月度分摊SQL实现

场景说明

订单表中存储的均为年付订阅订单,需要将每笔年付订单拆分为12条月度收入记录:

  • 拆分起始日期为订单原日期,后续每条记录日期逐次加1个月,最后一条记录为原日期加11个月,覆盖完整12个月服务周期
  • 单条月度记录的收入为订单总金额除以12
  • 源数据示例:
date, domain, total
2022-01-07, test.com, 120
  • 预期输出共12条记录,日期从2022-01-07到2022-12-07,每条对应月分摊收入10

可直接运行的SQL

利用PostgreSQL内置的generate_series序列生成函数即可快速实现行拆分,代码如下(请将代码中的你的订单表名替换为实际业务中的订单表名称):

SELECT
    (ord.date + make_interval(months => seq.offset_num))::date AS date,
    ord.domain,
    ord.total / 12.0 AS total
FROM 你的订单表名 ord
CROSS JOIN generate_series(0, 11) AS seq(offset_num);

逻辑解释

  • generate_series(0, 11)会生成0到11共12个连续整数,作为每个订单的月份偏移值,通过交叉连接让每个订单关联12条偏移记录,天然完成1行拆12行的需求
  • 偏移值为0时加0个月,就是订单原日期;偏移值为11时加11个月,就是周期最后一个月的对应日期,和拆分规则完全匹配
  • 金额计算直接用总金额除以12即可,如果业务要求保留固定小数位,可以套一层ROUND(ord.total/12.0, 2)保留两位小数
  • 以上SQL针对示例数据运行,会输出和预期完全一致的12条分摊记录

注意:如果后续表中会混入非年付订单,需要在WHERE子句中增加年付订单的过滤条件,避免错误拆分。

内容的提问来源于stack exchange,提问作者Tomaž Bratanič

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:27:17