sql >> Database >  >> RDS >> Mysql

MySQL - alternatieven voor geneste subquery's bij het beperken van geaggregeerde gegevens in een gecorreleerde subquery

Nee, u kunt geen gecorreleerde subquery's gebruiken in de FROM clausule. Maar je kunt ze gebruiken in de ON voorwaarden:

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)

Gelijkaardig, voor veel datums:

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 

Beide zoekopdrachten gaan ervan uit dat Datatable.Date heeft een UNIQUE beperking.




  1. Hoe de testdatabase van Django alleen in het geheugen uit te voeren?

  2. SQL-tabelgegevens opmaken als teksttabel

  3. Een inventarisdatabase maken in Microsoft Access

  4. Hoe SECOND() werkt in MariaDB