Kira nilai penggunaan mengikut kumpulan dalam MySQL: berdasarkan perbezaan baris sebelumnya
Mengira perbezaan antara nilai berturut-turut berdasarkan faktor pengelompokan adalah tugas yang sangat biasa dalam MySQL. Katakan anda perlu mengira nilai penggunaan setiap nombor jujukan (SN) berdasarkan nilai sebelumnya.
Struktur data:
Data sampel mengandungi jadual EnergyLog
dengan skema berikut:
<code>SN | 日期 | 值</code>
Hasil yang dijangkakan:
Matlamatnya adalah untuk memanjangkan jadual untuk menambah lajur "penggunaan" yang mewakili perbezaan setiap SN berbanding dengan "nilai" baris sebelumnya.
Penyelesaian:
Pembolehubah MySQL menyediakan cara yang mudah untuk mencapai ini. Dengan menggunakan pembolehubah yang ditakrifkan pengguna (@lastSN
dan @lastValue
) kita boleh menjejaki SN dan nilai sebelumnya semasa melelaran melalui data.
<code class="language-sql">-- 声明变量 SELECT EL.SN, EL.日期, EL.值, IF(@lastSN = EL.SN, EL.值 - @lastValue, 0.00) AS 消耗, @lastSN := EL.SN, @lastValue := EL.值 -- 来自表 FROM EnergyLog EL, (SELECT @lastSN := 0, @lastValue := 0) AS SQLVars -- 按分组因子SN和日期排序 ORDER BY EL.SN, EL.日期;</code>
Penjelasan:
FROM
mengisytiharkan pembolehubah (@lastSN
dan @lastValue
) dan memulakannya kepada 0. EnergyLog
dalam susunan yang diingini (mengikut SN dan tarikh). @lastSN
. Jika terdapat padanan, hitung penggunaan (perbezaan) antara nilai semasa dan @lastValue
sebelumnya. @lastSN
dan @lastValue
akan dikemas kini kepada lelaran seterusnya. Output:
SN | 日期 | 值 | 消耗 |
---|---|---|---|
2380 | 2012-10-30 | 21.01 | 0.00 |
2380 | 2012-10-31 | 22.04 | 1.03 |
2380 | 2012-11-01 | 22.65 | 0.61 |
2380 | 2012-11-02 | 23.11 | 0.46 |
20100 | 2012-10-30 | 35.21 | 0.00 |
20100 | 2012-10-31 | 37.07 | 1.86 |
20100 | 2012-11-01 | 38.17 | 1.10 |
20100 | 2012-11-02 | 38.97 | 0.80 |
20103 | 2012-10-30 | 57.98 | 0.00 |
20103 | 2012-10-31 | 60.83 | 2.85 |
Atas ialah kandungan terperinci Bagaimana untuk Mengira Nilai Penggunaan dengan Menolak dari Baris Sebelumnya dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!