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

如何按每月22日至次月21日周期统计多表count、revenue等交易指标

解决方案

方案1:数仓/SQL层面直接计算(推荐,适合全量批量统计)

核心逻辑是先给每一行日维度数据打上对应计费月标签,再合并所有业务表后按计费月分组聚合即可。
通用SQL实现示例:

SELECT 
  -- 生成计费月标签,格式为'yyyy-MM'
  CASE 
    WHEN EXTRACT(DAY FROM dt) >= 22 THEN DATE_FORMAT(DATE_ADD(dt, INTERVAL 1 MONTH), '%Y-%m')
    ELSE DATE_FORMAT(dt, '%Y-%m')
  END AS billing_month,
  SUM(count) AS total_count,
  SUM(revenue) AS total_revenue,
  SUM(transaction_num) AS total_transaction
FROM (
  -- 对齐字段后合并所有需要统计的业务表
  SELECT dt, count, revenue, transaction_num FROM business_table1
  UNION ALL
  SELECT dt, count, revenue, transaction_num FROM business_table2
  UNION ALL
  SELECT dt, count, revenue, transaction_num FROM business_table3
  -- 更多业务表继续追加UNION ALL即可
) all_business_data
GROUP BY billing_month
ORDER BY billing_month

优化提示

  • 不同数据库语法适配:PostgreSQL可替换DATE_ADD为+ interval '1 month',ClickHouse可使用toYYYYMM(date_add(MONTH, 1, dt))格式,核心逻辑通用
  • 高频使用场景可提前构建公共日维度表,预存每个日期对应的计费月标签,后续统计直接关联该表即可,无需重复写判断逻辑,公共维度表参考结构:
日期dt对应计费月billing_month
2020-12-212020-12
2020-12-222021-01
2021-01-212021-01
2021-01-222021-02
  • 如需按客户、业务线等维度拆分统计,在GROUP BY中追加对应维度字段即可

方案2:Python离线处理方案(适合小批量本地文件数据处理)

如果数据存储为CSV/Excel等本地文件,可使用pandas实现:

import pandas as pd

# 1. 读取并合并所有业务表
file_list = ["table1.csv", "table2.csv", "table3.csv"]
df_list = []
for f in file_list:
    df = pd.read_csv(f, parse_dates=["dt"])
    df_list.append(df)
full_df = pd.concat(df_list, ignore_index=True)

# 2. 生成计费月标签
full_df["billing_month"] = full_df["dt"].apply(
    lambda x: (x + pd.DateOffset(months=1)).strftime("%Y-%m") 
    if x.day >= 22 
    else x.strftime("%Y-%m")
)

# 3. 按计费月聚合统计
stats_result = full_df.groupby("billing_month").agg(
    total_count=("count", "sum"),
    total_revenue=("revenue", "sum"),
    total_transaction=("transaction_num", "sum")
).reset_index().sort_values("billing_month")

# 输出结果
print(stats_result)
# stats_result.to_csv("billing_month_stats.csv", index=False)

边界逻辑校验

可通过题目给出的示例验证规则正确性:

2021年1月计费周期对应2020年12月22日-2021年1月21日

  • 2020-12-22:日部分≥22,加1个月后得到2021-01,符合
  • 2021-01-21:日部分<22,直接取当月2021-01,符合
  • 2021-01-22:日部分≥22,加1个月后得到2021-02,对应2021年2月计费周期,符合规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:39:03