このような場合、各行をその前の行と比較するため、2つのパスが必要です。
これを行うそのような方法の1つは、最初に行うことです:
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`;
正確な実装はあなた次第ですが、これはそれを行うための良い方法です。