Rumah > Artikel > pangkalan data > Bagaimanakah anda mengira perbezaan dalam baris pernyataan MySQL SELECT?
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!