Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh mengira perbezaan antara baris dalam pertanyaan MySQL SELECT?

Bagaimanakah saya boleh mengira perbezaan antara baris dalam pertanyaan MySQL SELECT?

DDD
DDDasal
2024-11-07 01:42:02282semak imbas

How can I calculate the difference between rows in a MySQL SELECT query?

Mengira Perbezaan antara Baris dalam Pertanyaan SELECT MySQL

Untuk mengira perbezaan antara baris dalam pertanyaan SELECT, pertimbangkan pendekatan berikut:

Menggunakan LEFT JOIN dengan MAX() Subquery

Anda boleh menggunakan LEFT JOIN untuk menyambungkan baris dengan baris sebelumnya, berdasarkan syarat. Dalam kes anda, anda ingin mencari baris sebelumnya untuk setiap tarikh:

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

Menggunakan Emulasi Fungsi Lag()

Memandangkan MySQL tidak mempunyai lag() fungsi, anda boleh meniru satu menggunakan yang ditentukan pengguna pembolehubah:

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

Keputusan

Kedua-dua kaedah akan menghasilkan output yang diingini:

ID | Kilometers | date       | car_id | car_driver | number_km_since_last_date   
 1 | 100        | 2012-05-04 | 1 | 1 | 0  
 2 | 200        | 2012-05-08 | 1 | 1 | 100  
 4 | 600        | 2012-05-16 | 1 | 1 | 400  
 3 | 1000       | 2012-05-25 | 1 | 1 | 400

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengira perbezaan antara baris dalam pertanyaan MySQL SELECT?. 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