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.