ऐसा कुछ करने के लिए, आपको दो पास चाहिए, क्योंकि आप प्रत्येक पंक्ति की तुलना उसके पहले वाले से करेंगे।
ऐसा करने का एक ऐसा तरीका सबसे पहले होगा:
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`;
सटीक कार्यान्वयन आप पर निर्भर है, लेकिन इसे करने का यह एक अच्छा तरीका होगा।