Per qualcosa del genere, hai bisogno di due passaggi, perché confronterai ogni riga con quella precedente.
Uno di questi modi per farlo sarebbe prima:
SET @lastprice = 0.0;
Quindi, il tuo "primo passaggio" sarà simile a:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;
L'ordine è importante qui, poiché vuoi costruire una sequenza temporale cronologica.
Quindi, tutto ciò che devi fare è recuperare le righe da questo risultato in cui i prezzi vecchi e nuovi sono diversi. Qualcosa del genere andrà bene:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;
La tua domanda finale sarebbe simile a questa:
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`;
In alternativa, potresti preferire utilizzare una tabella temporanea per memorizzare i risultati della sottoquery. In tal caso, sarebbe simile a questo:
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`;
L'esatta implementazione dipende da te, ma questo sarebbe un buon modo per farlo.