Voor zoiets als dit heb je twee passen nodig, omdat je elke rij gaat vergelijken met de vorige.
Een manier om dit te doen zou zijn om eerst:
SET @lastprice = 0.0;
Uw "first pass" ziet er dan als volgt uit:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;
De volgorde is hier belangrijk, omdat je een chronologische tijdlijn wilt bouwen.
Vervolgens hoeft u alleen de rijen uit dit resultaat op te halen waar de oude en nieuwe prijzen verschillen. Iets als dit is voldoende:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;
Uw uiteindelijke vraag zou er ongeveer zo uitzien:
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`;
Als alternatief kunt u er de voorkeur aan geven een tijdelijke tabel te gebruiken om de subqueryresultaten op te slaan. In dat geval zou het er ongeveer zo uitzien:
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`;
De exacte implementatie is aan jou, maar dit zou een goede manier zijn om het te doen.