Czasami może być konieczne porównanie kolejnych wierszy lub porównanie każdego wiersza z poprzednim wierszem w tabeli MySQL. W tym artykule przyjrzymy się, jak porównać dwa wiersze z tej samej tabeli przy użyciu sprzężeń własnych. Możesz go użyć do porównania kolejnych rzędów lub uzyskania różnicy między dwoma rzędami.
Jak porównać kolejne wiersze w MySQL
Załóżmy, że masz następującą tabelę sprzedaż (identyfikator, data_zamówienia, kwota) Kolumna i kwota zawiera łączne skumulowane dane sprzedaży.
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 |
+------+------------+--------+ Przeczytaj bonus:Jak porównać dwie kolumny w MySQL
W naszym przykładzie, jeśli chcesz sprawdzić sprzedaż dokonywaną każdego dnia, musisz porównać wartość kwoty w każdym wierszu z wartością w poprzednim wierszu. Oto zapytanie SQL do porównania każdego wiersza z poprzednim.
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 |
+------+------------+--------+--------------+
W powyższym zapytaniu łączymy tabelę sprzedaży ze sobą za pomocą warunku INNER JOIN g2.id=g1.id + 1, który pozwala porównać każdy wiersz z poprzednim wierszem.
Przeczytaj bonus:Jak uzyskać każdy N-ty wiersz w MySQL
Pamiętaj, że warunek ten zależy od tego, że nasza kolumna id ma kolejne liczby. Większość tabel ma kolumnę klucza podstawowego z automatycznym przyrostem, więc powinna działać w większości przypadków. Jeśli różnią się one inną stałą, możesz odpowiednio zmodyfikować warunek INNER JOIN.
Mamy nadzieję, że teraz możesz łatwo porównać dwa wiersze w tej samej tabeli w MySQL.
Ubiq ułatwia wizualizację danych i monitorowanie ich w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj Ubiq za darmo.