För något sådant här behöver du två pass, eftersom du kommer att jämföra varje rad med den före den.
Ett sådant sätt att göra detta är att först:
SET @lastprice = 0.0;
Sedan kommer ditt "första pass" att se ut så här:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;
Ordningen är viktig här, eftersom du vill bygga en kronologisk tidslinje.
Sedan är allt du behöver göra att hämta raderna från detta resultat där de gamla och nya priserna är olika. Något liknande detta kommer att göra:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;
Din sista fråga skulle se ut ungefär så här:
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 kanske du föredrar att använda en tillfällig tabell för att lagra underfrågans resultat. I så fall skulle det se ut ungefär så här:
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 exakta implementeringen är upp till dig, men det här skulle vara ett bra sätt att göra det.