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

MySQL如何将月内所有日期替换为当月首日并汇总播放量?

解决方案

不同数据库的当月首日计算语法略有区别,以下是主流数据库的实现方案,同时修正了你原SQL的语法问题:原SQL中SELECT了未参与分组的plays_字段,不符合分组聚合的SQL规范,已移除冗余字段。

MySQL 实现

SELECT 
  film_title,
  DATE_FORMAT(period_day, '%Y-%m-01') AS first_day_of_month,
  SUM(plays_) AS accum_plays
FROM yaya_csv
GROUP BY film_title, first_day_of_month
ORDER BY film_title, first_day_of_month;

直接通过DATE_FORMAT固定日期的日部分为01,即可得到对应月份的首日,返回值为标准日期格式字符串,也可通过STR_TO_DATE转换为DATE类型。

PostgreSQL 实现

SELECT 
  film_title,
  DATE_TRUNC('month', period_day)::DATE AS first_day_of_month,
  SUM(plays_) AS accum_plays
FROM yaya_csv
GROUP BY film_title, first_day_of_month
ORDER BY film_title, first_day_of_month;

用DATE_TRUNC函数将日期截断到月份维度,再通过::DATE强转为纯日期类型,即可得到当月首日。

SQL Server 实现

SELECT 
  film_title,
  DATEFROMPARTS(YEAR(period_day), MONTH(period_day), 1) AS first_day_of_month,
  SUM(plays_) AS accum_plays
FROM yaya_csv
GROUP BY film_title, DATEFROMPARTS(YEAR(period_day), MONTH(period_day), 1)
ORDER BY film_title, first_day_of_month;

通过DATEFROMPARTS拼接年、月、固定值1,直接生成当月首日的日期类型值。

Hive/Spark SQL 大数据场景实现

SELECT 
  film_title,
  TRUNC(period_day, 'MM') AS first_day_of_month,
  SUM(plays_) AS accum_plays
FROM yaya_csv
GROUP BY film_title, TRUNC(period_day, 'MM')
ORDER BY film_title, first_day_of_month;

用TRUNC函数指定截断维度为月份,直接返回当月首日的日期值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:45:04