Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MYSQL - obtenir les lignes où le prix est modifié

Pour quelque chose comme ça, vous avez besoin de deux passages, car vous comparerez chaque ligne à celle qui la précède.

Une telle façon de procéder serait de commencer par :

SET @lastprice = 0.0;

Ensuite, votre "première passe" ressemblera à :

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

L'ordre est important ici, car vous souhaitez créer une chronologie chronologique.

Ensuite, tout ce que vous avez à faire est de récupérer les lignes de ce résultat où les anciens et les nouveaux prix sont différents. Quelque chose comme ça fera l'affaire :

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

Votre requête finale ressemblerait à ceci :

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

Vous pouvez également préférer utiliser une table temporaire pour stocker les résultats de la sous-requête. Dans ce cas, cela ressemblerait à ceci :

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

La mise en œuvre exacte dépend de vous, mais ce serait une bonne façon de le faire.