Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Perbezaan Penggunaan Tenaga Antara Baris Berturut-turut dalam MySQL oleh SN?
MySQL: Mengira Perbezaan Penggunaan Tenaga Antara Baris Berturut-turut mengikut Nombor Siri (SN)
Dokumen ini menggariskan kaedah untuk mengira perbezaan penggunaan tenaga antara baris berturut-turut dalam pangkalan data MySQL, dikumpulkan mengikut nombor siri (SN).
Masalah:
Memandangkan jadual yang mengandungi data penggunaan tenaga, matlamatnya adalah untuk mengira perbezaan penggunaan bagi setiap SN, mewakili perubahan antara nilai semasa dan sebelumnya untuk SN khusus tersebut.
Data Contoh:
Jadual berikut (EnergyLog
) menggambarkan struktur data awal:
SN | Date | Value |
---|---|---|
2380 | 2012-10-30 00:15:51 | 21.01 |
2380 | 2012-10-31 00:31:03 | 22.04 |
2380 | 2012-11-01 00:16:02 | 22.65 |
2380 | 2012-11-02 00:15:32 | 23.11 |
20100 | 2012-10-30 00:15:38 | 35.21 |
20100 | 2012-10-31 00:15:48 | 37.07 |
20100 | 2012-11-01 00:15:49 | 38.17 |
20100 | 2012-11-02 00:15:19 | 38.97 |
20103 | 2012-10-30 10:27:34 | 57.98 |
20103 | 2012-10-31 12:24:42 | 60.83 |
Output yang Diingini:
Pertanyaan harus menghasilkan jadual dengan lajur Consumption
tambahan:
SN | Date | Value | Consumption |
---|---|---|---|
2380 | 2012-10-30 00:15:51 | 21.01 | 0.00 |
2380 | 2012-10-31 00:31:03 | 22.04 | 1.03 |
2380 | 2012-11-01 00:16:02 | 22.65 | 0.61 |
2380 | 2012-11-02 00:15:32 | 23.11 | 0.46 |
20100 | 2012-10-30 00:15:38 | 35.21 | 0.00 |
20100 | 2012-10-31 00:15:48 | 37.07 | 1.86 |
20100 | 2012-11-01 00:15:49 | 38.17 | 1.10 |
20100 | 2012-11-02 00:15:19 | 38.97 | 0.80 |
20103 | 2012-10-30 10:27:34 | 57.98 | 0.00 |
20103 | 2012-10-31 12:24:42 | 60.83 | 2.85 |
Penyelesaian SQL:
Pertanyaan SQL berikut menggunakan pembolehubah yang ditentukan pengguna untuk mencapai hasil yang diinginkan:
<code class="language-sql">SELECT EL.SN, EL.Date, EL.Value, IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00) AS Consumption, @lastSN := EL.SN, @lastValue := EL.Value FROM EnergyLog EL, (SELECT @lastSN := 0, @lastValue := 0) AS SQLVars ORDER BY EL.SN, EL.Date;</code>
Penjelasan:
@lastSN
dan @lastValue
: Ini adalah pembolehubah yang ditentukan pengguna yang dimulakan kepada 0. @lastSN
menjejaki SN terakhir diproses dan @lastValue
menyimpan nilai diproses terakhir.IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00)
: Pernyataan bersyarat ini menyemak sama ada SN semasa adalah sama dengan SN sebelumnya. Jika benar, ia mengira perbezaan penggunaan; jika tidak, ia menetapkan penggunaan kepada 0.00 (untuk kemasukan pertama setiap SN).@lastSN := EL.SN, @lastValue := EL.Value
: Tugasan ini mengemas kini pembolehubah yang ditentukan pengguna selepas memproses setiap baris.ORDER BY EL.SN, EL.Date
: Klausa ini memastikan bahawa baris diproses dalam susunan yang betul (oleh SN dan kemudian mengikut tarikh) untuk pengiraan perbezaan yang tepat.Pendekatan ini secara cekap mengira perbezaan penggunaan tenaga untuk setiap SN dengan memanfaatkan keupayaan pengendalian pembolehubah MySQL. Penggunaan ORDER BY
adalah penting untuk ketepatan keputusan.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Perbezaan Penggunaan Tenaga Antara Baris Berturut-turut dalam MySQL oleh SN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!