Para algo como esto, necesita dos pases, porque comparará cada fila con la anterior.
Una de esas formas de hacer esto sería primero:
SET @lastprice = 0.0;
Entonces, su "primer paso" se verá así:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;
El orden es importante aquí, ya que desea construir una línea de tiempo cronológica.
Luego, todo lo que necesita hacer es recuperar las filas de este resultado donde los precios antiguos y nuevos son diferentes. Algo como esto servirá:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;
Su consulta final se vería así:
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`;
Alternativamente, puede preferir usar una tabla temporal para almacenar los resultados de la subconsulta. En ese caso, sería algo como esto:
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 implementación exacta depende de usted, pero esta sería una buena forma de hacerlo.