Heim  >  Artikel  >  Datenbank  >  Wie kann ich den Unterschied zwischen Zeilen in einer MySQL SELECT-Abfrage berechnen?

Wie kann ich den Unterschied zwischen Zeilen in einer MySQL SELECT-Abfrage berechnen?

DDD
DDDOriginal
2024-11-07 01:42:02281Durchsuche

How can I calculate the difference between rows in a MySQL SELECT query?

Berechnen von Unterschieden zwischen Zeilen in einer MySQL-SELECT-Abfrage

Um den Unterschied zwischen Zeilen in einer SELECT-Abfrage zu berechnen, ziehen Sie den folgenden Ansatz in Betracht:

Verwenden eines LEFT JOIN mit einer MAX()-Unterabfrage

Sie können einen LEFT JOIN verwenden, um eine Zeile basierend auf einer Bedingung mit der vorherigen zu verbinden. In Ihrem Fall möchten Sie die vorherige Zeile für jedes Datum finden:

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

Verwenden einer Lag()-Funktionsemulation

Da MySQL keine hat Mit der Funktion lag() können Sie eine mit einer benutzerdefinierten Variablen emulieren:

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

Ergebnisse

Beide Methoden erzeugen die gewünschte Ausgabe:

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

Das obige ist der detaillierte Inhalt vonWie kann ich den Unterschied zwischen Zeilen in einer MySQL SELECT-Abfrage berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn