Eu acredito que isso agora corresponde às suas necessidades?
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);
Sua estrutura de código é muito pobre para eu realmente descobrir o que está acontecendo, mas essencialmente parece que você não sabia que operadores agregados como
MAX()
retornar apenas um único valor. Você também não sabe ao certo qual é o preço mínimo/máximo (eu assumi que é por
pair
) Execute o código e veja se ele retorna certo? Se não, me diga onde não corresponde e eu posso começar a corrigi-lo!
EDITAR Novos resultados: