SELECT
year,
month,
SUM(total_count) OVER (ORDER BY year, month) AS cumulative_count
FROM
(
SELECT
YEAR(FROM_UNIXTIME(time)) AS year,
MONTH(FROM_UNIXTIME(time)) AS month,
COUNT(*) AS total_count
FROM
your_table
GROUP BY
YEAR(FROM_UNIXTIME(time)),
MONTH(FROM_UNIXTIME(time))
WHERE
time >= UNIX_TIMESTAMP( DATE_FORMAT( NOW(), '%Y-%m-01' ) - INTERVAL 4 MONTH )
ORDER BY
year,
month
) AS subquery;
your_table
是你的表名,time
是你的时间字段名。
解读:
首先使用子查询来计算每个月份的总数量。然后,使用窗口函数 SUM()
和 OVER
子句,按照年份和月份的顺序对总数量进行排序并进行累计求和。
SUM(total_count)
表达式将获取截止当前月份的累计总数量。
接下来,使用表别名 subquery
引用子查询的结果集,并在外部查询中返回每个月份、对应的年份以及累计相加的结果。
结果:
该查询将返回一个结果集,其中包含每个月份的年份、月份以及从起始月份到当前月份的累计总数量。
下面结果中的time字段对应上sql语句的year、month字段
这是每月数量:
这是使用窗口函数累计相加的数量: