You need to enable JavaScript to run this app. PostgreSQL替代LAST_DAY实现月度固定成本分摊至当月销售记录
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL替代LAST_DAY实现月度固定成本分摊至当月销售记录

解决方案

PostgreSQL 无内置的 LAST_DAY() 函数,可通过内置的 date_trunc 函数实现等价的当月日期匹配逻辑,同时原查询末尾的GROUP BY 1,2,3属于无意义冗余(关联后每行销售记录仅匹配一条对应的月度固定成本,不会产生重复行),可直接移除。

最小修改方案(保留原查询整体结构)

仅替换报错的LAST_DAY表达式,其余逻辑与原查询保持一致:

SELECT
  s.sales_date, 
  s.country,
  s.sales_volume,
  f.fix_costs
FROM sales s
JOIN (
  SELECT 
    (date_trunc('MONTH', sales_date) + INTERVAL '1 MONTH - 1 DAY')::date AS month_ld,
    SUM(fix_costs) AS fix_costs
  FROM sales
  WHERE country = 'None'
  GROUP BY month_ld
) f 
  ON f.month_ld = (date_trunc('MONTH', s.sales_date) + INTERVAL '1 MONTH - 1 DAY')::date
WHERE s.country <> 'None';

更高效的优化写法

无需分别计算两边的当月最后一天做匹配,直接用月份截断值作为关联键,减少日期运算开销,逻辑更简洁:

SELECT
  s.sales_date, 
  s.country,
  s.sales_volume,
  f.fix_costs
FROM sales s
JOIN (
  SELECT 
    date_trunc('MONTH', sales_date) AS month_start,
    SUM(fix_costs) AS fix_costs
  FROM sales
  WHERE country = 'None'
  GROUP BY month_start
) f 
  ON f.month_start = date_trunc('MONTH', s.sales_date)
WHERE s.country <> 'None';

两种写法运行后均可得到完全符合预期的查询结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 13:57:07