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

Bagaimanakah anda mengira perbezaan dalam baris pernyataan MySQL SELECT?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-10 10:05:02363semak imbas

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

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

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

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!

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