Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Perbezaan Penggunaan Tenaga Antara Baris Berturut-turut dalam MySQL oleh SN?

Bagaimana untuk Mengira Perbezaan Penggunaan Tenaga Antara Baris Berturut-turut dalam MySQL oleh SN?

Patricia Arquette
Patricia Arquetteasal
2025-01-10 12:03:43295semak imbas

How to Calculate Energy Consumption Differences Between Consecutive Rows in MySQL by 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn