Mengira Perbezaan Antara Baris dalam Pernyataan SELECT MySQL
Dalam senario ini, anda mempunyai jadual MySQL yang mengandungi data seperti kilometer, tarikh, dan maklumat kereta, tetapi ia mungkin tidak selalu dalam susunan kronologi. Matlamat anda adalah untuk mencipta paparan yang merangkumi lajur tambahan yang memaparkan bilangan kilometer sejak tarikh terakhir bagi setiap kereta.
Untuk mencapai matlamat ini, anda tidak boleh bergantung pada SERTAI mudah pada lajur ID kerana data adalah tidak disusun mengikut kronologi. Sebaliknya, anda perlu menggunakan LEFT JOIN dan subquery untuk menentukan tarikh maksimum yang mendahului tarikh semasa untuk setiap baris.
Menggunakan LEFT JOIN dan Subquery
Pertanyaan berikut menggunakan LEFT JOIN untuk menyambungkan baris jadual semasa (mt1) dengan baris (mt2) yang mempunyai tarikh maksimum sebelum tarikh mt1:
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
Pertanyaan ini mengira perbezaan antara kilometer baris semasa (mt1) dan kilometer baris dengan tarikh maksimum sebelum tarikh semasa (mt2). Jika mt2 adalah NULL, bermakna tiada baris sebelumnya, jadi perbezaannya ialah 0.
Kaedah Alternatif Menggunakan Penggodam MySQL
Sebagai alternatif, anda boleh menggunakan Godam MySQL untuk meniru fungsi lag(), yang tidak disokong secara asli dalam MySQL:
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
Pertanyaan ini menggunakan pembolehubah yang ditentukan pengguna (@kilo) untuk menjejaki nilai kilometer sebelumnya. Perbezaan antara nilai kilometer semasa dan @kilo memberikan anda bilangan kilometer sejak tarikh terakhir. Pembolehubah @kilo dikemas kini dengan nilai kilometer semasa selepas setiap baris diproses.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Perbezaan Kilometer Antara Baris dalam Jadual MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!