Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql Join 2 table et sélectionnez la valeur maximale et minimale entre la plage de dates

Je pense que cela correspond maintenant à vos besoins ?

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);

Votre structure de code est trop pauvre pour que je puisse vraiment comprendre ce qui se passe, mais il semble essentiellement que vous ne saviez pas que les opérateurs d'agrégation tels que MAX() renvoie une seule valeur.

Vous n'avez pas non plus été clair sur le prix minimum/maximum que vous vouliez (j'ai supposé que c'était par pair )

Exécutez le code et voyez s'il revient correctement? Si ce n'est pas le cas, dites-moi où cela ne correspond pas et je pourrai commencer à le corriger !

MODIFIER Nouveaux résultats :