Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql Join 2-Tabelle und wählen Sie den maximalen und minimalen Wert zwischen dem Datumsbereich aus

Ich glaube, das entspricht jetzt Ihren Anforderungen?

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

Ihre Codestruktur ist zu schlecht für mich, um wirklich herauszufinden, was vor sich geht, aber im Wesentlichen scheint es, dass Sie sich nicht bewusst waren, dass Operatoren wie MAX() aggregiert werden gibt nur einen einzigen Wert zurück.

Sie waren sich auch nicht sicher, welchen Mindest-/Höchstpreis Sie wollten (ich bin davon ausgegangen, dass es sich um ein pair handelt )

Führen Sie den Code aus und prüfen Sie, ob er richtig zurückgegeben wird. Wenn nicht, sagen Sie mir, wo es nicht passt, und ich kann mit dem Patchen beginnen!

BEARBEITEN Neue Ergebnisse: