Para algo assim, você precisa de duas passagens, porque você estará comparando cada linha com a anterior.
Uma dessas maneiras de fazer isso seria primeiro:
SET @lastprice = 0.0;
Então, sua "primeira passagem" ficará assim:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;
A ordem é importante aqui, pois você deseja construir uma linha do tempo cronológica.
Então, tudo o que você precisa fazer é recuperar as linhas desse resultado onde os preços antigos e novos são diferentes. Algo assim vai fazer:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;
Sua consulta final seria algo assim:
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`;
Como alternativa, você pode preferir usar uma tabela temporária para armazenar os resultados da subconsulta. Nesse caso, ficaria algo assim:
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`;
A implementação exata depende de você, mas essa seria uma boa maneira de fazer isso.