首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >累计月报

累计月报
EN

Stack Overflow用户
提问于 2012-04-05 01:38:38
回答 2查看 1.7K关注 0票数 1

我有一个光伏发电数据的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的累计合计:

代码语言:javascript
复制
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日

EN

回答 2

Stack Overflow用户

发布于 2012-04-05 01:57:11

我认为问题类似于这个http://www.richnetapps.com/using-mysql-generate-daily-sales-reports-filled-gaps/ --你需要创建一个带有日期(或年/月值)的表(可能是临时的)。但是,该示例在没有数据的地方保留零-我认为您可能希望在一个子选择上进行联接,以返回该日期(或年/月)之前的最新数据。

票数 1
EN

Stack Overflow用户

发布于 2012-04-05 02:39:59

我同意,我的想法与艾瑞克的建议一致。您将希望连接通常称为“日期维度表”的数据。您可以找到许多关于如何填充所述表的示例。这是数据仓库中的一种常见技术。

您还可以使用sub select在一次select中执行所需的操作。看看之前的一些线程,比如:generate days from date range

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10016425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档