sql >> Databasteknik >  >> RDS >> Mysql

Mysql Gå med i 2-tabellen och välj högsta och lägsta värde mellan datumintervall

Jag tror att detta nu matchar dina krav?

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

Din kodstruktur är för dålig för att jag verkligen ska kunna ta reda på vad som händer, men i huvudsak verkar det som att du inte var medveten om att aggregerade operatorer som MAX() returnera endast ett enda värde.

Du har också varit otydlig om vad du ville ha det lägsta/högsta priset på (jag har antagit att det är per pair )

Kör koden och se om den kommer tillbaka rätt? Om inte, berätta för mig var det inte matchar så kan jag börja patcha det!

REDIGERA Nya resultat:



  1. #1221 - Felaktig användning av UPDATE och ORDER BY

  2. Välj n slumpmässiga rader per angiven grupp

  3. Försöker 'ringa' lagrade procedurer med CodeIgniter

  4. Prestandapåverkan av olika felhanteringstekniker