累计月报

时间:2012-04-04 17:38:38

标签: mysql cumulative-sum

我有一张MySQL光伏发电数据表(pvdata),我需要从中制作月度汇总表。显示了一个简化的表格:

id日期时间pvdata
1 2012-01-01 10:00 50
1 2012-01-31 12:00 60
1 2012-02-10 13:00 70
2 2012-02-08 10:00 12
2 2012-03-20 10:00 17

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

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

年月cum_data
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;

给予:

年月cum_data
2012 1 60
2012 2 82
2012 3 17

2 个答案:

答案 0 :(得分:1)

我认为问题是这种问题http://www.richnetapps.com/using-mysql-generate-daily-sales-reports-filled-gaps/ - 您将要创建一个包含日期(或年/月值)的表(可能是临时的)。然而,该示例在没有数据的地方留下零 - 我想您将要在子选择上进行连接,该子选择在该日期之前(或年/月值)返回最新数据。

答案 1 :(得分:1)

我同意我对Aerik建议的看法。您需要加入通常称为“日期维度表”的数据。你可以找到很多关于如何填充所述表的例子。这是数据仓库中的常用技术。

您也可以使用子选择在一个选择中执行您需要的操作。看一下以前的一些主题:generate days from date range