通过PHP对大型SQL数据库中的电表读数进行排序

hlswsv35  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(112)

我不知道如何正确地问这个问题,因为我对这个问题有点绿色,看到我不能正确地问这个问题,我还没有能够谷歌的结果。
背景故事:我管理一个公寓大楼。每个公寓都有一个数字电表。每天我可以下载一个CSV文件的所有单位的和他们的读数。
使用PHP和SQL,我可以从一个名为tenants的表中提取UNIT #-然后我可以在浏览器上从特定日期开始的搜索中引用特定的单元#,它将自动计算该月(或我选择的任何范围)的使用情况。
我有那部分下来!我现在要做的是创建一个按钮拉,我可以看到所有租户在一个简单的表所有使用。
现在,数据库如下所示

|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|
ETC

随着我每天将CSV文件导入数据库,它会不断增长
我希望能够快速看到的是:

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

下面的代码给出了具体的单位

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'

我在如何选择所有单位而不是某个特定单位上遇到了困难。有什么想法可以轻松地做到这一点吗?或者是一个比我现在更好的方法?

ijxebb2r

ijxebb2r1#

使用MySQL来实现您想要的想法。

SELECT
    tb1.UNIT,
    (
        tb1.KWH -
        (
        SELECT
            tb3.KWH
        FROM
            kwh AS tb3
        WHERE
            tb3.DATE = DATE_ADD(tb1.DATE, INTERVAL -1 MONTH) AND tb3.UNIT = tb1.UNIT
        )
    ) AS "TOTAL KWH",
    CONCAT(
        DATE_ADD(tb1.DATE, INTERVAL -1 MONTH),
        " ~ ",
        DATE_ADD(tb1.DATE, INTERVAL -1 DAY)
    ) AS "DATE RANGE"
FROM
    kwh AS tb1
WHERE
    (
    SELECT
        COUNT(tb2.DATE)
    FROM
        kwh AS tb2
    WHERE
        tb2.DATE < tb1.DATE
    ) >= 1
ORDER BY
    tb1.DATE;

相关问题