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

Jak korzystać z Group By i samodzielnego łączenia, aby zwrócić minimalny, maksymalny, otwarty i zamknięty dzienny zestaw wyników cenowych?

Więc chcesz:

  • Alias ​​C odpowiadać wszystkim wierszom w grupie na dany dzień, więc możesz użyć MAX() i MIN() nad wierszami w tej grupie.
  • Alias ​​C2 odpowiadać ostatniemu wierszowi w danym dniu.
  • Alias ​​C3 odpowiadać wierszowi późniejszemu niż C2 tego samego dnia. Jeśli nie zostanie znaleziony, np. C3.* ma wartość NULL, to C2 jest najnowszym tego dnia.

Jest to często określane jako greatest-n-per-group zapytanie i często pojawia się na Stack Overflow. Oto rozwiązanie, które przetestowałem dla twoich danych testowych, ale możesz śledzić tag, który dodałem do twojego pytania, aby uzyskać inne rozwiązania i dyskusję.

edytuj: Brakowało mi wymagania zarówno ceny otwarcia, jak i ceny zamknięcia. Poniższe są edytowane.

SELECT DATE_FORMAT(C.`DTE`, '%m/%d/%Y') AS trading_day, 
  MIN(C.`PRICE`) AS min_price, 
  MAX(C.`PRICE`) AS max_price, 
  Copen.`PRICE` AS opening_price,
  Cclose.`PRICE` AS closing_price 
FROM `CHART_DATA` AS C 
INNER JOIN `CHART_DATA` AS Cclose 
  ON DAY(C.`DTE`) = DAY(Cclose.`DTE`) 
LEFT OUTER JOIN `CHART_DATA` AS Cclose_later 
  ON DAY(C.`DTE`) = DAY(Cclose_later.`DTE`) AND Cclose.`DTE` < Cclose_later.`DTE`
INNER JOIN `CHART_DATA` AS Copen 
  ON DAY(C.`DTE`) = DAY(Copen.`DTE`) 
LEFT OUTER JOIN `CHART_DATA` AS Copen_earlier 
  ON DAY(C.`DTE`) = DAY(Copen_earlier.`DTE`) AND Copen.`DTE` < Copen_earlier.`DTE`
WHERE Cclose_later.`DTE` IS NULL AND Copen_earlier .`DTE` IS NULL 
GROUP BY trading_day;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Interwał czasowy do pobierania danych z bazy danych i zatrzymania, gdy dane dotrą

  2. Zarządzaj MySQL za pomocą phpMyAdmin na Ubuntu 9.10 (Karmic)

  3. Jak wyświetlić przefiltrowane dane w JFreeChart

  4. Jak utworzyć wyjście dwóch kolumn z jednej kolumny?

  5. Problem z klejnotem mysql na OSX 10.6.8