Actualización 1:aquí hay un violín, http://sqlfiddle.com/#!2/818ad /2
, que usé para probar.
Actualización 2:aquí hay un violín, http://sqlfiddle.com/#!2/3f78d/10
que usé para refinar/arreglar más, según los comentarios de Sandy.
Actualización 3:Por alguna razón, el caso en el que no hay un día anterior no se manejó correctamente. Pensé que era. Sin embargo, actualicé para asegurarme de que funciona (un poco engorroso, pero parece estar bien. Último violín:http://sqlfiddle.com/#!2/3f78d/45
Creo que @Grijesh obtuvo conceptualmente lo principal que necesitaba a través de la autounión de los datos de entrada (¡así que asegúrese de votar su respuesta!). He limpiado un poco su consulta en la sintaxis (¡a partir de su consulta!):
SELECT
DATE(t1.`Production_date`) as theDate,
MAX( t1.`bundle_count` ) AS 'max(bundle_count)',
MAX( t1.`bundle_count` ) -
IF(
EXISTS
(
SELECT date(t2.production_date)
FROM input_example t2
WHERE t2.machine_no = 1 AND
date_sub(date(t1.production_date), interval 1 day) = date(t2.production_date)
),
(
SELECT MAX(t3.bundle_count)
FROM input_example t3
WHERE t3.machine_no = 1 AND
date_sub(date(t1.production_date), interval 1 day) = date(t3.production_date)
GROUP BY DATE(t3.production_date)
), 0
)
AS Total_Bundles_Used
FROM `input_example` t1
WHERE t1.machine_no = 1
GROUP BY DATE( t1.`production_date` )
Nota 1:creo que @Grijesh y yo estábamos solucionando los problemas de sintaxis de consulta al mismo tiempo. Es alentador que hayamos terminado con versiones muy similares después de que ambos estuviéramos limpiando. Mi versión difiere en el uso de IFNULL()
para cuando no hay datos precedentes. También terminé con un DATE_SUB
, y me aseguré de reducir varias fechas a meras fechas sin componente de tiempo, a través de DATE()
Nota 2:originalmente no había entendido completamente sus tablas de origen, por lo que pensé que necesitaba implementar un conteo continuo en la consulta. Pero luego de una mejor inspección, está claro que sus datos de origen ya tienen un conteo continuo, así que retiré esas cosas.