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

如何用SQL基于产品开售日期计算月均营收?

用SQL实现基于开售日期的月均营收计算

完全可以用日期函数实现这个需求,不过不同SQL数据库的日期函数语法略有差异。下面结合你已有的数据(产品ID、开售日期launch_date、总营收total_revenue),给出主流数据库的实现方案,同时处理类似Google Sheets中IFERROR的容错逻辑:

核心逻辑

月均营收 = 总营收 ÷ 自开售日至今的月份数
如果月份数为0(比如今日刚开售、开售日期在未来),则返回0


1. MySQL/MariaDB 实现

用TIMESTAMPDIFF直接计算月份差,比DATEDIFF更贴合需求:

SELECT
  product_id,
  launch_date,
  total_revenue,
  -- 容错处理月数为0的情况,保留两位小数
  CASE
    WHEN TIMESTAMPDIFF(MONTH, launch_date, CURDATE()) <= 0 THEN 0
    ELSE ROUND(total_revenue / TIMESTAMPDIFF(MONTH, launch_date, CURDATE()), 2)
  END AS monthly_avg_revenue
FROM your_table_name;
  • TIMESTAMPDIFF(MONTH, 开始日期, 结束日期):直接返回两个日期的月份差值
  • CURDATE():对应Sheets的TODAY()

2. SQL Server 实现

用DATEDIFF函数,注意参数顺序为(日期部分, 开始日期, 结束日期):

SELECT
  product_id,
  launch_date,
  total_revenue,
  -- 容错处理
  CASE
    WHEN DATEDIFF(MONTH, launch_date, GETDATE()) <= 0 THEN 0
    ELSE ROUND(total_revenue / DATEDIFF(MONTH, launch_date, GETDATE()), 2)
  END AS monthly_avg_revenue
FROM your_table_name;
  • GETDATE():获取当前日期时间,对应Sheets的TODAY()

3. PostgreSQL 实现

PostgreSQL用AGE函数计算时间间隔后提取月份:

SELECT
  product_id,
  launch_date,
  total_revenue,
  -- 容错处理
  CASE
    WHEN EXTRACT(MONTH FROM AGE(CURRENT_DATE, launch_date)) <= 0 THEN 0
    ELSE ROUND(total_revenue / EXTRACT(MONTH FROM AGE(CURRENT_DATE, launch_date)), 2)
  END AS monthly_avg_revenue
FROM your_table_name;
  • AGE(CURRENT_DATE, launch_date):计算两个日期的时间间隔
  • EXTRACT(MONTH FROM ...):从时间间隔中提取月份数

与Sheets公式的逻辑对应

你的Sheets公式=iferror(H200/DATEDIF(VLOOKUP(...),TODAY(),"M"),0)对应的SQL逻辑:

  • VLOOKUP:对应SQL中从数据表获取开售日期的逻辑(你已实现)
  • DATEDIF(..., TODAY(), "M"):对应SQL中的月份差计算函数
  • IFERROR(...,0):对应SQL中CASE语句处理月数为0的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:15:39