Saya yakin ini sekarang sesuai dengan kebutuhan Anda?
SELECT *
FROM Orders
JOIN (SELECT price as maxPrice, pair, tr_time as maxTime FROM Rates
JOIN (SELECT Rates.pair, MAX(Rates.price) AS price
FROM Rates, Orders
WHERE (Rates.tr_time between Orders.opentime and Orders.closetime)
GROUP BY Rates.pair)
as MaxPrices USING (price, pair)) maxRates USING (pair)
JOIN (SELECT price AS minPrice, pair, tr_time as minTime FROM Rates
JOIN (SELECT Rates.pair, MIN(Rates.price) AS price
FROM Rates, Orders
WHERE (Rates.tr_time between Orders.opentime and Orders.closetime)
GROUP BY Rates.pair)
as minPrices USING (price, pair)) minRates USING (pair);
Struktur kode Anda terlalu buruk bagi saya untuk benar-benar mengetahui apa yang sedang terjadi, tetapi pada dasarnya tampaknya Anda tidak menyadari bahwa operator agregat seperti MAX()
mengembalikan hanya satu nilai.
Anda juga tidak jelas tentang berapa harga minimum/maksimum yang Anda inginkan (saya berasumsi harga per pair
)
Jalankan kode dan lihat apakah itu kembali dengan benar? Jika tidak, beri tahu saya di mana itu tidak cocok dan saya dapat mulai menambalnya!
EDIT Hasil baru: