Mendapatkan semula Perbezaan Lajur dalam Pernyataan SELECT MySQL
Dalam MySQL, mendapatkan perbezaan antara nilai dalam dua baris pernyataan SELECT melibatkan penggunaan yang sesuai Teknik PILIH dan SERTAI. Mari kita periksa masalah ini dan terokai penyelesaian yang tersedia.
Jadual yang disediakan mengandungi baris yang disusun mengikut ID, kilometer, tarikh, ID kereta, pemandu kereta, dsb. Untuk mengisih jadual dengan betul, satu pernyataan SELECT dengan ORDER BY klausa digunakan, menghasilkan jadual yang diisih.
Seterusnya, matlamatnya ialah untuk mencipta paparan yang merangkumi lajur tambahan, "bilangan_km_sejak_tarikh_terakhir," memberikan bilangan kilometer sejak tarikh rekod terakhir. Satu pendekatan menggunakan INNER JOIN, tetapi ia menghadapi cabaran disebabkan baris yang tidak diisih.
Menggunakan LEFT JOIN dan Subquery:
Kaedah yang lebih berkesan melibatkan penggunaan LEFT JOIN digabungkan dengan subkueri. Subquery memilih tarikh maksimum yang kurang daripada tarikh baris semasa daripada jadual yang sama. Dengan menggabungkan baris semasa dengan baris sebelumnya maksimum, perbezaan dalam kilometer boleh dikira menggunakan ungkapan "mt1.Kilometers - IFNULL(mt2.Kilometers, 0)". Pertanyaan SQL yang terhasil ialah:
SELECT mt1.ID, mt1.Kilometers, mt1.date, mt1.Kilometers - IFNULL(mt2.Kilometers, 0) AS number_km_since_last_date FROM myTable mt1 LEFT JOIN myTable mt2 ON mt2.Date = ( SELECT MAX(Date) FROM myTable mt3 WHERE mt3.Date < mt1.Date ) ORDER BY mt1.date
Meniru Fungsi LAG() menggunakan MySQL Hack:
Teknik lain menggunakan meniru fungsi lag() yang bukan asli disokong dalam MySQL. Pembolehubah yang ditentukan pengguna, @kilo, dimulakan kepada sifar. Memandangkan setiap baris diproses dalam pertanyaan, kilometernya ditolak daripada nilai semasa @kilo, dan @kilo kemudian dikemas kini kepada kilometer semasa. Ini dengan berkesan memberikan perbezaan dalam kilometer sejak baris sebelumnya. Pertanyaan yang terhasil ialah:
SET @kilo=0; SELECT mt1.ID, mt1.Kilometers - @kilo AS number_km_since_last_date, @kilo := mt1.Kilometers Kilometers, mt1.date FROM myTable mt1 ORDER BY mt1.date
Atas ialah kandungan terperinci Bagaimana untuk Mengira Perbezaan Antara Nilai dalam Baris Berturut-turut dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!