Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menggunakan Group By dan self-join untuk mengembalikan set hasil harga min, max, open, dan close harian?

Jadi Anda ingin:

  • Alias ​​C agar sesuai dengan semua baris dalam grup untuk hari tertentu, jadi Anda dapat menggunakan MAX() dan MIN() di atas baris dalam grup itu.
  • Alias ​​C2 agar sesuai dengan baris terakhir pada hari tertentu.
  • Alias ​​C3 untuk berkorespondensi dengan baris setelah C2 di hari yang sama. Jika tidak ada yang ditemukan, mis. C3.* adalah NULL, maka C2 adalah yang terbaru pada hari itu.

Ini sering diberi label greatest-n-per-group kueri, dan itu sering muncul di Stack Overflow. Berikut adalah solusi yang saya uji untuk data pengujian Anda, tetapi Anda dapat mengikuti tag yang saya tambahkan ke pertanyaan Anda untuk solusi dan diskusi lainnya.

edit: Saya melewatkan persyaratan untuk harga pembukaan dan harga penutupan. Berikut ini diedit.

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. Menggunakan DISTINCT di dalam JOIN menciptakan masalah

  2. Duplikasi tabel relasional

  3. Ambil Gambar yang disimpan sebagai BLOB pada MYSQL DB

  4. Penutup MySQL vs komposit vs indeks kolom

  5. Mendapatkan Data Traversal Pohon Preorder yang Dimodifikasi ke dalam Array