Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Porównaj wiersze w tej samej tabeli w mysql

Aby wykonać zapytania, możesz wykonać „samozłączanie” (dołączenie tabeli do siebie). Trudną częścią jest tutaj znajomość kolejności wstawiania wierszy do tabeli i porównywanie tylko wierszy, które sąsiadują sekwencyjnie (czasowo). Zakładam, że masz jakąś kolumnę TIMESTAMP, która powie Ci, jakie zmiany cen nastąpiły po poprzednich. Jeśli nie, być może "ID" może cię o tym poinformować (większy wiersz identyfikatora jest wstawiany po mniejszym identyfikatorze).

Wywołanie tabeli 'TAB', użycie 'TRADER' w celu zapewnienia sprzężenia i użycie 'ID' w celu dostarczenia zamówienia, zapytanie wymagałoby trójstronnego sprzężenia zwrotnego, takiego jak:

SELECT a.trader
     , SUM(IF(a.price > b.price, 1, 0)) nbr_incr
     , SUM(IF(a.price < b.price, 1, 0)) nbr_decr
     , SUM(IF(a.price = b.price, 1, 0)) nbr_same
  FROM tab a
  JOIN tab b 
    ON a.trader = b.trader AND a.id > b.id
  LEFT OUTER JOIN tab c 
    ON a.trader = c.trader AND a.id > c.id AND b.id < c.id
 WHERE c.id IS NULL
 GROUP BY a.trader

Powyższe zapytanie łączy tabelę ze sobą dwukrotnie, tak że każda karta reprezentuje następujące elementy:

  • karta a:nowszy wiersz do porównania
  • tab b :bezpośrednio poprzedzający wiersz do porównania
  • Tab c :Wiersz między a i b w czasie (nie powinien istnieć)

Wykonujemy LEFT OUTER JOIN do „tab c”, ponieważ tak naprawdę nie chcemy, aby ten wiersz istniał. W klauzuli where filtrujemy nasze wyniki tylko do wyników, w których nie istnieje wiersz „tab c”.

Na koniec zapytanie wykonuje 'GROUP BY' na tradera, a SUM() przeprowadza przyrosty i spadki, porównując cenę z wierszy 'a' i 'b'.

To było zabawne wyzwanie. Mam nadzieję, że to pomoże!

Jan...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Baza danych MySQL jest uszkodzona... Co mam teraz zrobić?

  2. Nie można połączyć się z bazą danych po pewnym czasie wdrożenia na serwerze

  3. Jak uzyskać dane z bieżącego tygodnia w MySQL?

  4. Mysql:Ustaw zestaw znaków kolumny

  5. Zwracanie „ostatniego” wiersza każdego „grupuj według” w MySQL