Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql Dołącz do tabeli 2 i wybierz maksymalną i minimalną wartość między zakresem dat

Uważam, że teraz odpowiada to Twoim wymaganiom?

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

Twoja struktura kodu jest zbyt uboga, abym mógł naprawdę zrozumieć, co się dzieje, ale zasadniczo wydaje się, że nie wiedziałeś, że operatory agregujące, takie jak MAX() zwróć tylko jedną wartość.

Byłeś również niejasny, jaka jest minimalna/maksymalna cena (założyłem jej za pair )

Przetestuj kod i sprawdź, czy zwraca się prawidłowo? Jeśli nie, powiedz mi, gdzie nie pasuje, a mogę zacząć go łatać!

EDYTUJ Nowe wyniki:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ponowny problem z wydajnością tabeli MySQL MyISAM

  2. MySql Jak używać DATE_SUB w klauzuli Between

  3. Dodaj dynamiczne dane do wykresu liniowego z bazy danych mysql z wysokimi wykresami

  4. Wykonywanie wielu zapytań w codeigniter, których nie można wykonać pojedynczo

  5. W zapytaniach MySQL, po co używać join zamiast gdzie?