Rumah > pangkalan data > tutorial mysql > Bagaimanakah anda mengira perbezaan dalam baris pernyataan MySQL SELECT?

Bagaimanakah anda mengira perbezaan dalam baris pernyataan MySQL SELECT?

Mary-Kate Olsen
Lepaskan: 2024-11-10 10:05:02
asal
425 orang telah melayarinya

How do you calculate the difference in rows of a MySQL SELECT statement?

Mengira Perbezaan dalam Baris Penyata SELECT MySQL

Dalam MySQL, pengiraan perbezaan antara baris pernyataan SELECT boleh dicapai melalui pelbagai kaedah. Satu pendekatan biasa ialah menggunakan gabungan sendiri, membolehkan anda membandingkan baris dalam jadual yang sama. Pertimbangkan senario berikut:

Pernyataan Masalah:

Anda mempunyai jadual yang mengandungi data tentang kenderaan, termasuk kilometer, tarikh, ID kereta dan pemandunya. Walau bagaimanapun, disebabkan oleh urutan kemasukan data yang berbeza-beza, data mungkin tidak diisih. Anda berhasrat untuk mencipta paparan yang memaparkan bilangan kilometer yang dipandu sejak entri terakhir untuk setiap gabungan pemandu kereta, menghasilkan format berikut:

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

Penyelesaian 1: Sertai dengan Subquery

Anda boleh menggunakan subquery dalam INNER JOIN untuk mendapatkan semula kilometer baris sebelumnya untuk setiap rekod:

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

Dalam pertanyaan ini, subquery memilih tarikh maksimum sebelum tarikh baris semasa , dan tarikh maksimum ini kemudiannya dipadankan dengan rekod dalam LEFT JOIN.

Penyelesaian 2: Meniru Fungsi Lag

MySQL tidak menawarkan lag terbina dalam( ) tetapi anda boleh meniru kelakuannya melalui pembolehubah yang ditentukan pengguna:

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

Dalam pertanyaan ini, pembolehubah takrif pengguna @kilo menyimpan kilometer baris sebelumnya. Dengan setiap lelaran, pembolehubah yang ditentukan pengguna dikemas kini, dengan berkesan menjejaki perubahan dalam kilometer.

Atas ialah kandungan terperinci Bagaimanakah anda mengira perbezaan dalam baris pernyataan 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan