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

DDD
Lepaskan: 2024-11-07 01:42:02
asal
280 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!