You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP和SQL批量统计所有公寓电表指定日期区间用电量?

批量查询所有单元指定日期区间用电量的SQL方案

需求背景

我是公寓管理者,每间公寓配备数字电表,每日下载所有单元电表读数的CSV文件并导入SQL数据库。目前已通过PHP+SQL实现从tenants表获取单元号、查询单个指定单元在指定日期区间的用电量,现在需要一键生成所有单元的指定日期区间用电量汇总表。

当前数据库结构

|UNIT|KWH|DATE      |
|101 |100|01/01/2022|
|102 |80 |01/01/2022|
|103 |110|01/01/2022|
|104 |108|01/01/2022|
|101 |110|01/02/2022|
|102 |90 |01/02/2022|
|103 |125|01/02/2022|
|104 |128|01/01/2022|
...

期望输出汇总表

|UNIT|TOTAL KWH|DATE RANGE     
|101 |10       |01/01/2022 - 01/30/2022|
|102 |10       |01/01/2022 - 01/30/2022|
|103 |15       |01/01/2022 - 01/30/2022|
|104 |20       |01/01/2022 - 01/30/2022|

当前单个单元查询SQL

SELECT Max(KWH)-Min(KWH) AS TOTALKWH, UNIT AS UNIT 
FROM testdb 
WHERE UNIT = 'Unit_220' 
AND Date >= '11/01/2022' AND Date <= '11/30/2022'

修改后的批量查询SQL

直接去掉单个单元的过滤条件,加上GROUP BY UNIT按单元分组计算,同时拼接日期范围字段:

SELECT 
    UNIT,
    Max(KWH) - Min(KWH) AS `TOTAL KWH`,
    CONCAT('01/01/2022', ' - ', '01/30/2022') AS `DATE RANGE`
FROM testdb 
WHERE Date >= '01/01/2022' AND Date <= '01/30/2022'
GROUP BY UNIT
ORDER BY UNIT;

优化方案说明

  1. 确保日期字段类型正确:如果DATE字段是字符串类型,建议改成DATE或DATETIME类型,避免字符串比较的潜在错误(比如不同格式日期无法正确排序/筛选)。
  2. 关联tenants表避免遗漏单元:如果tenants表包含所有有效单元号,用LEFT JOIN可以确保即使某个单元在指定日期区间没有电表读数(比如空房)也能出现在结果中,用电量显示为0或NULL:
SELECT 
    t.UNIT,
    IFNULL(Max(d.KWH) - Min(d.KWH), 0) AS `TOTAL KWH`,
    CONCAT('01/01/2022', ' - ', '01/30/2022') AS `DATE RANGE`
FROM tenants t
LEFT JOIN testdb d ON t.UNIT = d.UNIT 
    AND d.Date >= '01/01/2022' AND d.Date <= '01/30/2022'
GROUP BY t.UNIT
ORDER BY t.UNIT;
  1. 处理单条读数的情况:如果某个单元在指定区间只有一条读数,Max(KWH)-Min(KWH)会得到0,符合实际用电量为0的情况,无需额外处理。

内容的提问来源于stack exchange,提问作者Lloyd Diggins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:51:09