ठीक है, घर आ गया, और इसका पता लगा लिया।
SELECT stock_id, t1.price AS `then`, t2.price AS `now`, ROUND(t2.price - t1.price, 2) AS `difference`
FROM (
SELECT stock_id, price, date FROM share_prices sp
WHERE date = (SELECT MIN(date) FROM share_prices sp2
WHERE date BETWEEN '2010/02/23 10:00:00'
AND '2010/02/24 10:00:00'
AND sp2.stock_id = sp.stock_id)
) t1
JOIN
(
SELECT stock_id, price, date FROM share_prices sp
WHERE date = (SELECT MAX(date) FROM share_prices sp2
WHERE date BETWEEN '2010/02/23 10:00:00'
AND '2010/02/24 10:00:00'
AND sp2.stock_id = sp.stock_id)
) t2 USING(stock_id)
ORDER BY `difference` DESC
2 उपश्रेणियों के परिणामों का उपयोग करता है, प्रत्येक की अपनी उपश्रेणी के साथ क्रमशः पहली और अंतिम, उस श्रेणी के लिए रिकॉर्ड होती है।
मैं integer
का उपयोग कर रहा था stock_id
. के लिए , float
price
. के लिए और timestamp
तारीख के लिए, क्योंकि अन्य डेटा प्रकारों के साथ (विशेषकर MIN और MAX के साथ) समस्याएँ हो सकती हैं।