Hola Ze Roberto.
Para mi debería darte error, pero no conozco MySql en todo caso ayúdame a entenderlo..
Cuando te apoyas en tablas derivadas para hacer los cálculos.
En la tabla derivada interna, haces un
IF(Estado = '9', 0, 1), no sería mejor filtrarlo en el where?
Cuál es el tercer campo al que te refieres en
GROUP BY 1, 3 ?
No entiendo cuando a la tabla derivada interna le das el alias "a" y luego te refieres al campo a.tipo, cuando la tabla deriva interna no tiene ese campo
(SELECT a.ProductoID, a.Tipo, AVG(a.Total) Demanda FROM (SELECT ProductoID, Fecha, SUM(Cantidad * IF(Estado = '9', 0, 1)) Total
FROM ventas_lineas WHERE Fecha BETWEEN ?ldDesde AND ?ldHasta
GROUP BY 1, 3
) a) b ON b.ProductoID = a.ProductoID AND b.Tipo = a.Tipo
En la consulta que te recomendé anteriormente no tome en cuenta el número de días transcurridos en el periodo de tiempo, pienso que este Sql te serviría.
liDiasDelPeriodo =
ldHasta -ldDesdeSELECT a.*, b.Demanda
FROM productos a LEFT JOIN
(SELECT ProductoID, (avg(Cantidad) / ?liDiasDelPeriodo) * ?lnNumeroDias demanda