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

MySQL - lựa chọn thay thế cho các truy vấn con lồng nhau khi giới hạn dữ liệu tổng hợp trong một truy vấn con tương quan

Không, bạn không thể sử dụng các truy vấn phụ được điều chỉnh trong FROM mệnh đề. Nhưng bạn có thể sử dụng chúng trong ON điều kiện:

SELECT AVG(d.DailyData1) Data1_20DayAvg 
       --- other aggregate stuff on d (Datatable)
FROM 
      ( SELECT '2012-01-23' AS DateChecked
      ) AS dd
  JOIN
      DataTable AS d
    ON
      d.Date <= dd.DateChecked
    AND
      d.Date >= COALESCE( 
      ( SELECT DailyData1 
        FROM DataTable AS last20 
        WHERE Date <= dd.DateChecked 
          AND (other conditions for last20)
        ORDER BY Date DESC 
        LIMIT 1 OFFSET 19
      ), '1001-01-01'   )
WHERE (other conditions for d Datatable)

Tương tự, cho nhiều ngày:

SELECT dd.DateChecked 
     , AVG(d.DailyData1) Data1_20DayAvg 
       --- other aggregate stuff on d (Datatable)
FROM 
      ( SELECT DISTINCT Date AS DateChecked
        FROM DataTable 
      ) AS dd
  JOIN
      DataTable AS d
    ON
      d.Date <= dd.DateChecked
    AND
      d.Date >= COALESCE( 
      ( SELECT DailyData1 
        FROM DataTable AS last20
        WHERE Date <= dd.DateChecked 
          AND (other conditions for last20)
        ORDER BY Date DESC 
        LIMIT 1 OFFSET 19
      ), '1001-01-01'   )
WHERE (other conditions for d Datatable)
GROUP BY 
      dd.DateChecked 

Cả hai truy vấn đều giả định rằng Datatable.DateUNIQUE ràng buộc.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL và CASE WHEN với một loạt các giá trị

  2. Cài đặt MySQL trên máy Mac

  3. Cân nhắc của DevOps đối với việc triển khai cơ sở dữ liệu sẵn sàng cho sản xuất

  4. MySQL - Tham gia 2 bảng

  5. Codeigniter hoạt động bản ghi truy vấn mất quá nhiều thời gian để tải dữ liệu từ cơ sở dữ liệu