sql >> Databasteknik >  >> RDS >> Mysql

MySQL - alternativ till kapslade underfrågor vid begränsning av aggregerad data i en korrelerad underfråga

Nej, du kan inte använda korrealiserade underfrågor i FROM klausul. Men du kan använda dem i ON villkor:

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)

Liknande, för många datum:

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 

Båda frågorna förutsätter att Datatable.Date har en UNIQUE begränsning.




  1. Vad är logisk ELLER-operatör i SQL Server - SQL Server / TSQL Tutorial Del 119

  2. Lägger till ett extra kolumnvärde med INSERT ... SELECT i MySQL

  3. Använda ett UUID som primärnyckel med Laravel 5

  4. Vilka karaktärer måste escapes för att förhindra (My)SQL-injektioner?