Database
 sql >> Datenbank >  >> RDS >> Database

So vergleichen Sie zwei Zeilen aus derselben Tabelle

Manchmal müssen Sie möglicherweise aufeinanderfolgende Zeilen vergleichen oder jede Zeile mit der vorherigen Zeile in der MySQL-Tabelle vergleichen. In diesem Artikel sehen wir uns an, wie zwei Zeilen aus derselben Tabelle mithilfe von Self-Joins verglichen werden. Sie können damit aufeinanderfolgende Zeilen vergleichen oder den Unterschied zwischen zwei Zeilen ermitteln.


Wie man aufeinanderfolgende Zeilen in MySQL vergleicht

Angenommen, Sie haben die folgende Tabelle Verkäufe (ID, Bestelldatum, Betrag) und die Betragsspalte enthält die gesamten kumulativen Verkaufsdaten.

mysql> create table sales(id int auto_increment primary key,
 order_date date, amount int);

mysql> insert into sales(order_date, amount)
     values('2020-10-01',100),
     ('2020-10-02',125),
     ('2020-10-03',140),
     ('2020-10-04',160);

mysql> select * from sales;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-10-01 |    100 |
|    2 | 2020-10-02 |    125 |
|    3 | 2020-10-03 |    140 |
|    4 | 2020-10-04 |    160 |
+------+------------+--------+

Bonuslektüre:Wie man zwei Spalten in MySQL vergleicht

Wenn Sie in unserem Beispiel die an jedem Tag getätigten Verkäufe herausfinden möchten, müssen Sie den Betragswert jeder Zeile mit dem der vorherigen Zeile vergleichen. Hier ist die SQL-Abfrage, um jede Zeile mit der vorherigen Zeile zu vergleichen.

mysql> SELECT
         g1.id, g1.order_date,g1.amount,
         (g2.amount - g1.amount) AS daily_amount
     FROM
         sales g1 INNER JOIN sales g2 ON g2.id = g1.id + 1;
+------+------------+--------+--------------+
| id   | order_date | amount | daily_amount |
+------+------------+--------+--------------+
|    1 | 2020-10-01 |    100 |           25 |
|    2 | 2020-10-02 |    125 |           15 |
|    3 | 2020-10-03 |    140 |           20 |
+------+------------+--------+--------------+

In der obigen Abfrage verknüpfen wir die Verkaufstabelle mit sich selbst, indem wir eine INNER JOIN-Bedingung g2.id=g1.id + 1 verwenden, die es Ihnen ermöglicht, jede Zeile mit ihrer vorherigen Zeile zu vergleichen.

Bonuslektüre:So erhalten Sie jede n-te Zeile in MySQL

Bitte beachten Sie, dass diese Bedingung davon abhängt, dass unsere ID-Spalte fortlaufende Nummern hat. Die meisten Tabellen haben eine Primärschlüsselspalte mit automatischer Inkrementierung, sodass sie in den meisten Fällen funktionieren sollte. Wenn sie sich durch eine andere Konstante unterscheiden, können Sie die INNER JOIN-Bedingung entsprechend ändern.

Hoffentlich können Sie jetzt problemlos zwei Zeilen in derselben Tabelle in MySQL vergleichen.

Ubiq macht es einfach, Daten zu visualisieren und sie in Echtzeit-Dashboards zu überwachen. Testen Sie Ubiq kostenlos.