Heim  >  Artikel  >  Datenbank  >  Wie berechnet man Kilometerunterschiede zwischen Zeilen in einer MySQL-Tabelle?

Wie berechnet man Kilometerunterschiede zwischen Zeilen in einer MySQL-Tabelle?

DDD
DDDOriginal
2024-11-08 20:03:02559Durchsuche

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

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

In diesem Szenario haben Sie eine MySQL-Tabelle mit Daten wie Kilometern, Datumsangaben, und Fahrzeuginformationen, jedoch möglicherweise nicht immer in chronologischer Reihenfolge. Ihr Ziel besteht darin, eine Ansicht zu erstellen, die eine zusätzliche Spalte enthält, die die Anzahl der Kilometer seit dem letzten Datum für jedes Auto anzeigt.

Um dies zu erreichen, können Sie sich nicht auf einen einfachen JOIN für die ID-Spalte verlassen, da die Daten vorhanden sind nicht chronologisch sortiert. Stattdessen müssen Sie einen LEFT JOIN und eine Unterabfrage verwenden, um das maximale Datum zu bestimmen, das für jede Zeile vor dem aktuellen Datum liegt.

Verwendung eines LEFT JOIN und einer Unterabfrage

Die folgende Abfrage verwendet einen LEFT JOIN, um die aktuelle Tabellenzeile (mt1) mit einer Zeile (mt2) zu verbinden, deren maximales Datum vor dem Datum von mt1 liegt:

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

Diese Abfrage berechnet die Differenz zwischen den Kilometern der aktuellen Zeile (mt1) und die Kilometer der Zeile mit dem maximalen Datum vor dem aktuellen Datum (mt2). Wenn mt2 NULL ist, bedeutet das, dass es keine vorherige Zeile gibt, also ist die Differenz 0.

Alternative Methode mit MySQL Hackery

Als Alternative können Sie a verwenden MySQL-Hack zur Emulation der lag()-Funktion, die in MySQL nicht nativ unterstützt wird:

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

Diese Abfrage verwendet eine benutzerdefinierte Variable (@kilo), um den vorherigen Kilometerwert zu verfolgen. Die Differenz zwischen dem aktuellen Kilometerwert und @kilo ergibt die Anzahl der Kilometer seit dem letzten Datum. Die @kilo-Variable wird nach der Verarbeitung jeder Zeile mit dem aktuellen Kilometerwert aktualisiert.

Das obige ist der detaillierte Inhalt vonWie berechnet man Kilometerunterschiede zwischen Zeilen in einer MySQL-Tabelle?. 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