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

Zapytanie MYSQL - pobierz wiersze, w których zmienia się cena

Do czegoś takiego potrzebujesz dwóch przejść, ponieważ będziesz porównywać każdy rząd z poprzednim.

Jednym z takich sposobów na zrobienie tego byłoby najpierw:

SET @lastprice = 0.0;

Wtedy Twoje „pierwsze podanie” będzie wyglądać tak:

SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;

Kolejność jest tutaj ważna, ponieważ chcesz zbudować chronologiczną oś czasu.

Następnie wystarczy pobrać wiersze z tego wyniku, w których stara i nowa cena są różne. Coś takiego zrobi:

SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;

Twoje ostateczne zapytanie wyglądałoby mniej więcej tak:

SET @lastprice = 0.0;
SELECT * FROM (
    SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
    FORM `tablename` ORDER BY `Date` ASC
) `tmp`
WHERE `oldprice` != `newprice`;

Alternatywnie możesz preferować użycie tabeli tymczasowej do przechowywania wyników podzapytania. W takim przypadku wyglądałoby to mniej więcej tak:

SET @lastprice = 0.0;
CREATE TEMPORARY TABLE `tmp`
    SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
    FROM `tablename` ORDER BY `Date` ASC;
SELECT * FROM `tmp` WHERE `oldprice` != `newprice`;
DROP TEMPORARY TABLE `tmp`;

Dokładna implementacja zależy od Ciebie, ale byłby to dobry sposób, aby to zrobić.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oddzielna klauzula Join w indeksie złożonym

  2. Połączenie lewe MySQL + Min

  3. Zapisz GeoDataFrame w bazie danych SQL

  4. Jak przejść przez tabelę za pomocą kursora w MySQL?

  5. Znaki akcentowane w tabeli mySQL