За нещо подобно се нуждаете от две преминавания, защото ще сравнявате всеки ред с този преди него.
Един такъв начин да направите това е първо:
SET @lastprice = 0.0;
Тогава вашето „първо преминаване“ ще изглежда така:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;
Редът е важен тук, тъй като искате да изградите хронологична времева линия.
След това всичко, което трябва да направите, е да извлечете редовете от този резултат, където старите и новите цени са различни. Нещо подобно ще свърши работа:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;
Последната ви заявка ще изглежда така:
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`;
Като алтернатива можете да предпочетете да използвате временна таблица за съхраняване на резултатите от подзаявката. В такъв случай ще изглежда така:
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`;
Точното изпълнение зависи от вас, но това би бил добър начин да го направите.