Für so etwas benötigen Sie zwei Durchgänge, da Sie jede Zeile mit der vorherigen vergleichen werden.
Eine Möglichkeit, dies zu tun, wäre zuerst:
SET @lastprice = 0.0;
Dann sieht Ihr "erster Durchgang" so aus:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;
Die Reihenfolge ist hier wichtig, da Sie eine chronologische Zeitleiste erstellen möchten.
Dann müssen Sie nur noch die Zeilen aus diesem Ergebnis abrufen, in denen sich die alten und neuen Preise unterscheiden. Etwas in der Art wie folgt:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;
Ihre letzte Abfrage würde in etwa so aussehen:
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`;
Alternativ können Sie es vorziehen, eine temporäre Tabelle zum Speichern der Unterabfrageergebnisse zu verwenden. In diesem Fall würde es etwa so aussehen:
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`;
Die genaue Implementierung liegt bei Ihnen, aber dies wäre ein guter Weg, dies zu tun.