sql >> Database teknologi >  >> RDS >> Mysql

MYSQL-forespørgsel - få rækker, hvor prisen ændres

For sådan noget har du brug for to gennemløb, fordi du vil sammenligne hver række med den før den.

En sådan måde at gøre dette på ville være først at:

SET @lastprice = 0.0;

Derefter vil dit "første pass" se sådan ud:

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

Rækkefølgen er vigtig her, da du ønsker at bygge en kronologisk tidslinje.

Derefter er alt, hvad du skal gøre, at hente rækkerne fra dette resultat, hvor de gamle og nye priser er forskellige. Noget som dette vil gøre:

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

Din endelige forespørgsel ville se nogenlunde sådan ud:

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`;

Alternativt kan du foretrække at bruge en midlertidig tabel til at gemme underforespørgselsresultaterne. I så fald ville det se sådan ud:

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`;

Den nøjagtige implementering er op til dig, men dette ville være en god måde at gøre det på.




  1. Postgresql gør null til nul

  2. Sammensæt grupper i SQL Server

  3. Sådan fungerer UTC_TIME() i MariaDB

  4. Tilføj en kolonne til en tabel, hvis den ikke allerede eksisterer