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

如何将季度周期拆分为单个月份并均分对应USD金额?

将季度PERIOD拆分为月度记录并平均分配USD

原表结构与数据

PERIOD列类型为varchar,格式为YYYY/MM,代表对应季度的最后一个月份(如2021/03是2021年第一季度,2021/06是第二季度):

PERIODYEARUSD
2021/032021100
2021/062021100

需求

将每个季度拆分为包含的3个月份,同时将USD金额平均分配到每个月,保留两位小数,得到如下结果:

PERIODYEARUSD
2021/01202133.33
2021/02202133.33
2021/03202133.33
2021/04202133.33
2021/05202133.33
2021/06202133.33

解决方案

下面提供两种常见数据库的实现方式:

1. MySQL 实现

利用临时数字表生成每个季度对应的3个月份,再与原表关联计算:

WITH nums AS (
    SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2
)
SELECT
    DATE_FORMAT(
        DATE_SUB(STR_TO_DATE(t.PERIOD, '%Y/%m'), INTERVAL n MONTH),
        '%Y/%m'
    ) AS PERIOD,
    t.YEAR,
    ROUND(t.USD / 3, 2) AS USD
FROM your_table t
JOIN nums ON n <= (MONTH(STR_TO_DATE(t.PERIOD, '%Y/%m')) - 1) % 3
ORDER BY PERIOD;

2. PostgreSQL 实现

使用generate_series生成月份序列,结合日期函数计算:

SELECT
    TO_CHAR(
        (TO_DATE(t.PERIOD, 'YYYY/MM') - INTERVAL '2 months' + (n || ' months')::INTERVAL),
        'YYYY/MM'
    ) AS PERIOD,
    t.YEAR,
    ROUND(t.USD / 3, 2) AS USD
FROM your_table t
JOIN generate_series(0,2) n ON TRUE
ORDER BY PERIOD;

说明

  • 核心逻辑:先将PERIOD转换为日期类型,再生成该季度对应的3个月份日期,最后格式化为YYYY/MM字符串;
  • USD金额通过ROUND(USD/3,2)实现平均分配并保留两位小数;
  • 替换your_table为你的实际表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:55:27