Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie berechnet man den Unterschied in den Zeilen einer MySQL SELECT-Anweisung?

Mary-Kate Olsen
Freigeben: 2024-11-10 10:05:02
Original
336 Leute haben es durchsucht

How do you calculate the difference in rows of a MySQL SELECT statement?

Berechnen der Differenz in Zeilen einer MySQL-SELECT-Anweisung

In MySQL kann die Berechnung der Differenz zwischen Zeilen einer SELECT-Anweisung erfolgen durch verschiedene Methoden. Ein gängiger Ansatz ist die Verwendung eines Selbst-Joins, der es Ihnen ermöglicht, Zeilen innerhalb derselben Tabelle zu vergleichen. Stellen Sie sich das folgende Szenario vor:

Problemstellung:

Sie verfügen über eine Tabelle mit Daten zu Fahrzeugen, einschließlich Kilometer, Datum, Fahrzeug-ID und Fahrer. Aufgrund unterschiedlicher Dateneingabereihenfolgen können die Daten jedoch unsortiert sein. Sie möchten eine Ansicht erstellen, die die Anzahl der gefahrenen Kilometer seit der letzten Eingabe für jede Auto-Fahrer-Kombination anzeigt, was zu folgendem Format führt:

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
Nach dem Login kopieren

Lösung 1: Mit Unterabfrage verbinden

Sie können eine Unterabfrage innerhalb eines INNER JOIN verwenden, um die Kilometer der vorherigen Zeile für jeden Datensatz abzurufen:

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
Nach dem Login kopieren

In dieser Abfrage wählt eine Unterabfrage das maximale Datum vor dem Datum der aktuellen Zeile aus , und dieses maximale Datum wird dann mit einem Datensatz im LEFT JOIN abgeglichen.

Lösung 2: Emulieren der Verzögerungsfunktion

MySQL bietet keine integrierte Verzögerung( )-Funktion, aber Sie können ihr Verhalten durch eine benutzerdefinierte Variable nachahmen:

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
Nach dem Login kopieren

In dieser Abfrage speichert die benutzerdefinierte Variable @kilo die Kilometer der vorherigen Zeile. Bei jeder Iteration wird die benutzerdefinierte Variable aktualisiert, wodurch die Änderung in Kilometern effektiv verfolgt wird.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage