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

MySQL - alternatif untuk subquery bersarang saat membatasi data agregat dalam subquery yang berkorelasi

Tidak, Anda tidak dapat menggunakan subkueri berkorelasi di FROM ayat. Tetapi Anda dapat menggunakannya di ON ketentuan:

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)

Serupa, untuk banyak tanggal:

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 

Kedua kueri mengasumsikan bahwa Datatable.Date memiliki UNIQUE kendala.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ImportError:Tidak ada modul bernama MySQLdb

  2. MySQL:Memilih semua kolom dalam tabel ditambah satu kolom dari tabel yang sama

  3. Apakah mungkin untuk mengeksekusi string di MySQL?

  4. Bagaimana cara menguji apakah suatu string adalah JSON atau bukan?

  5. API kalender Google :Memilih/Membuat kalender?