如何通过SQL求和计算爱沙尼亚月度日间用电量
计算月度日间用电量的解决方案
要获取月度总日间用电量,你可以将原按天统计的查询作为子查询,在外层对每日的OST值求和。同时针对原SQL中的细节做调整,以精准匹配爱沙尼亚日间时段(周一至周五6:00-22:00)的定义:
修正后的求和SQL
SELECT SUM(OST) AS MONTHLY_DAYTIME_USAGE FROM ( SELECT MAX(KWHI1) - MIN(KWHI1) AS OST FROM `LOGPV` WHERE `AEG` BETWEEN '2024.04.01 00:00:00' AND '2024.04.30 23:59:59' AND (HOUR(`AEG`) BETWEEN 6 AND 21 OR (HOUR(`AEG`) = 22 AND MINUTE(`AEG`) = 0)) AND WEEKDAY(`AEG`) BETWEEN 0 AND 4 GROUP BY DATE(`AEG`) ) daily_daytime_usage;
关键调整说明
- 时间范围补全:在起止日期后加上时分秒,避免漏掉4月30日最后时段的记录
- 时段精准匹配:原SQL的小时范围是7-21,调整为覆盖6:00到22:00整的记录(如果只需要到21:59:59,直接用
HOUR(AEG) BETWEEN 6 AND 21即可) - 工作日判断简化:MySQL的
WEEKDAY()函数返回0代表周一、4代表周五,直接用BETWEEN 0 AND 4比WEEKDAY(AEG)+1更直观 - 分组逻辑优化:用
DATE(AEG)分组替代DAY(AEG),避免跨月时不同月份的同一天被错误合并
替代方案(局限性说明)
如果能确保月度内日间时段的电量数据连续无中断,也可以直接计算整个时段的MAX(KWHI1)-MIN(KWHI1),但这种方法风险较高——若某天日间数据有缺失,会导致结果偏差,因此更推荐子查询求和的方式:
SELECT MAX(KWHI1) - MIN(KWHI1) AS MONTHLY_DAYTIME_USAGE FROM `LOGPV` WHERE `AEG` BETWEEN '2024.04.01 00:00:00' AND '2024.04.30 23:59:59' AND (HOUR(`AEG`) BETWEEN 6 AND 21 OR (HOUR(`AEG`) = 22 AND MINUTE(`AEG`) = 0)) AND WEEKDAY(`AEG`) BETWEEN 0 AND 4;
内容的提问来源于stack exchange,提问作者Maario
相关产品推荐
相关产品推荐

