さて、家に帰って、これを理解することができました。
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)が発生する可能性があるため、日付については。