Ok, đã về nhà và có thể tìm ra điều này.
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
Sử dụng kết quả từ 2 truy vấn con, mỗi truy vấn con có truy vấn con của riêng chúng cho lần lượt truy vấn đầu tiên và cuối cùng, ghi lại cho phạm vi đó.
Tôi đang sử dụng integer
cho stock_id
, float
cho price
và timestamp
cho ngày, vì có thể có vấn đề (đặc biệt là với MIN và MAX) với các loại dữ liệu khác.