Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để sử dụng Nhóm Theo và tự tham gia để trả về bộ kết quả giá tối thiểu, tối đa, mở và đóng hàng ngày?

Vì vậy, bạn muốn:

  • Bí danh C tương ứng với tất cả các hàng trong nhóm cho một ngày nhất định, vì vậy bạn có thể sử dụng MAX()MIN() trên các hàng trong nhóm đó.
  • Bí danh C2 tương ứng với hàng cuối cùng trong một ngày nhất định.
  • Bí danh C3 tương ứng với một hàng muộn hơn C2 trong cùng một ngày. Nếu không tìm thấy, tức là C3.* là NULL, sau đó là C2 là thông tin mới nhất vào ngày hôm đó.

Điều này thường được gắn nhãn greatest-n-per-group và nó xuất hiện thường xuyên trên Stack Overflow. Đây là giải pháp mà tôi đã thử nghiệm cho dữ liệu thử nghiệm của bạn, nhưng bạn có thể theo dõi thẻ tôi đã thêm vào câu hỏi của bạn để biết các giải pháp và thảo luận khác.

chỉnh sửa: Tôi đã bỏ lỡ yêu cầu đối với cả giá mở cửa và giá đóng cửa. Phần sau được chỉnh sửa.

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. Số lượng bảng tối đa có thể làm việc trong SQL Server và MySQL

  2. php mysql sắp xếp theo ngày (Gần đây)

  3. Sự khác biệt và hạn chế động của chuỗi PHP

  4. Làm cách nào để đặt <option select =select> bằng MySQL và PHP?

  5. Khi một hàng mới trong cơ sở dữ liệu được thêm vào, một chương trình dòng lệnh bên ngoài phải được gọi