Jadi Anda ingin:
- Alias
Cagar sesuai dengan semua baris dalam grup untuk hari tertentu, jadi Anda dapat menggunakanMAX()danMIN()di atas baris dalam grup itu. - Alias
C2agar sesuai dengan baris terakhir pada hari tertentu. - Alias
C3untuk berkorespondensi dengan baris setelahC2di hari yang sama. Jika tidak ada yang ditemukan, mis.C3.*adalah NULL, makaC2adalah 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;