我有一个光伏发电数据的MySQL表(pvdata),我需要从中生成一个每月汇总表。简化表如下所示:
id * pvdata
1:00- 2012-01-01 10:00 : 50
1:00- 2012-01-31 12:00 - 60
1月1日2012-02-10 13:00 -70
2:00- 2012-02-08 10:00 - 12
2月2日2012-03-20 10:00
每月汇总表需要显示数据库中所有系统的累积生成,而不管我是否收到了该月的数据,因此例如下面的3个月包含id =1的总生成(2个月收到的数据)。
此外,一个id在同一个月中可能有多个数据点,因此报告必须报告该月的最大值(数据)。
年零月- cum_data
2012年1月1日,月60日
2012财年第二财年第二财年82财年
2012财年3月3日,87财年
我对此还很陌生,所以已经挣扎了一段时间。我能想到的最好的结果是显示当月的累计合计,但不包括当前月份没有数据的I的累计合计:
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月1日,月60日
2012财年第二财年第二财年82财年
2012年3月3日,7月17日
发布于 2012-04-05 01:57:11
我认为问题类似于这个http://www.richnetapps.com/using-mysql-generate-daily-sales-reports-filled-gaps/ --你需要创建一个带有日期(或年/月值)的表(可能是临时的)。但是,该示例在没有数据的地方保留零-我认为您可能希望在一个子选择上进行联接,以返回该日期(或年/月)之前的最新数据。
发布于 2012-04-05 02:39:59
我同意,我的想法与艾瑞克的建议一致。您将希望连接通常称为“日期维度表”的数据。您可以找到许多关于如何填充所述表的示例。这是数据仓库中的一种常见技术。
您还可以使用sub select在一次select中执行所需的操作。看看之前的一些线程,比如:generate days from date range
https://stackoverflow.com/questions/10016425
复制相似问题