sql >> Databáze >  >> RDS >> Mysql

MySQL – alternativy k vnořeným poddotazům při omezení agregovaných dat v korelovaném poddotazu

Ne, v FROM nemůžete použít korelované poddotazy doložka. Ale můžete je použít v ON podmínky:

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)

Podobné pro mnoho dat:

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 

Oba dotazy předpokládají, že Datatable.DateUNIQUE omezení.




  1. Které jsou výkonnější, CTE nebo dočasné tabulky?

  2. Postgres dotaz pro kontrolu řetězce je číslo

  3. mysql vyhledá segment názvu tabulky

  4. Jak načíst velké množství řetězců, aby odpovídaly databázi Oracle?