1

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

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 的数据点,因此报告必须报告该月的 max(data)。

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

4

2 回答 2

1

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

于 2012-04-04T17:57:11.233 回答
1

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

您还可以使用子选择在一次选择中执行您需要的操作。看看以前的一些线程,例如:从日期范围生成天数

于 2012-04-04T18:39:58.700 回答