Untuk hal seperti ini, Anda memerlukan dua lintasan, karena Anda akan membandingkan setiap baris dengan yang sebelumnya.
Salah satu cara untuk melakukan ini adalah dengan pertama:
SET @lastprice = 0.0;
Kemudian, "pass pertama" Anda akan terlihat seperti:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;
Urutannya penting di sini, karena Anda ingin membuat garis waktu kronologis.
Kemudian, yang perlu Anda lakukan adalah mengambil baris dari hasil ini di mana harga lama dan baru berbeda. Sesuatu seperti ini akan berhasil:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;
Permintaan terakhir Anda akan terlihat seperti ini:
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`;
Atau, Anda mungkin lebih suka menggunakan tabel sementara untuk menyimpan hasil subquery. Dalam hal ini, akan terlihat seperti ini:
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`;
Implementasi yang tepat terserah Anda, tetapi ini akan menjadi cara yang baik untuk melakukannya.