Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengira Perbezaan Antara Nilai dalam Baris Berturut-turut dalam MySQL?

Bagaimana untuk Mengira Perbezaan Antara Nilai dalam Baris Berturut-turut dalam MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-07 04:18:02453semak imbas

How to Calculate the Difference Between Values in Consecutive Rows in MySQL?

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!

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