Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 累积月度报告_Mysql_Cumulative Sum - Fatal编程技术网

Mysql 累积月度报告

Mysql 累积月度报告,mysql,cumulative-sum,Mysql,Cumulative Sum,我有一个MySQL的光伏发电数据表(pvdata),我需要从中生成一个月度汇总表。简化的表格如下所示: id日期时间pvdata 2012-01-01 10:0050 2012-01-31 12:00 60 2012-02-10 13:0070 2012-02-08 10:00 12 2012-03-20 10:00 17 月度汇总表需要显示数据库中所有系统的累计生成量,而不管我是否收到该月的数据,因此下面的示例第3个月包含id=1的总生成量(第2个月收到的数据) 此外,同一个月内可能有多个id

我有一个MySQL的光伏发电数据表(pvdata),我需要从中生成一个月度汇总表。简化的表格如下所示:

id日期时间pvdata
2012-01-01 10:0050
2012-01-31 12:00 60
2012-02-10 13:0070
2012-02-08 10:00 12
2012-03-20 10:00 17

月度汇总表需要显示数据库中所有系统的累计生成量,而不管我是否收到该月的数据,因此下面的示例第3个月包含id=1的总生成量(第2个月收到的数据)

此外,同一个月内可能有多个id数据点,因此报告必须报告该月的最大值(数据)

年-月累计数据
2012年1月60日
2012 2 82
2012 3 87

我对这一点还很陌生,所以已经挣扎了一段时间。我能得出的最佳结果显示了当月的累计总数,但不包括当前月份没有数据的ID的累计总数:

CREATE TEMPORARY TABLE intermed_gen_report  
SELECT year(date) AS year, month(date) AS month, id, max(pvdata) AS maxpvdata
FROM pvdata
GROUP BY id, year(date), month(date)
ORDER BY year(date), month(date);

SELECT year, month, SUM(maxpvdata) AS cum_data
FROM intermed_gen_report
GROUP BY year, month
ORDER BY year, month;
给予:

年-月累计数据
2012年1月60日
2012 2 82

2012 3 17

我认为问题是这样的一种-您需要创建一个带有日期(或年/月值)的表(可能是临时的)。然而,该示例在没有数据的地方留下了零-我认为您需要在子选择上执行联接,该子选择返回该日期之前的最新数据(或年/月值)。

我同意Aerik的建议。您将希望加入通常称为“日期维度表”的数据。您可以找到许多关于如何填充该表的示例。这是数据仓库中的一种常见技术


您还可以使用子选择在一次选择中执行所需操作。看看前面的一些线程,比如:

这样您的查询实际上不必累积数据-它已经累积了(换句话说,您不必为pvdata将之前的所有月份相加-无论使用的最大pvdata值是多少),对吗?是的,表中的数据是累积的,因此,如果每个月都有每个ID的数据,这将是一个简单的练习。不幸的是,情况并非如此,但我的报告仍然必须显示每个ID每月的总金额。