Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengira Perbezaan Kilometer Antara Baris dalam Jadual MySQL?

Bagaimana untuk Mengira Perbezaan Kilometer Antara Baris dalam Jadual MySQL?

DDD
DDDasal
2024-11-08 20:03:02606semak imbas

How to Calculate Kilometer Differences Between Rows in a MySQL Table?

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!

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