Update 1:Hier is een viool, http://sqlfiddle.com/#!2/818ad /2
, die ik heb gebruikt om te testen.
Update 2:Hier is een viool, http://sqlfiddle.com/#!2/3f78d/10
die ik heb gebruikt voor verdere verfijning/reparatie, gebaseerd op Sandy's opmerkingen.
Update 3:Om de een of andere reden werd het geval waarin er geen vorige dag was, niet correct afgehandeld. Ik dacht dat het was. Ik heb echter een update uitgevoerd om ervoor te zorgen dat het werkt (een beetje omslachtig - maar het lijkt juist te zijn. Last fiddle:http://sqlfiddle.com/#!2/3f78d/45
Ik denk dat @Grijesh je conceptueel het belangrijkste heeft gegeven dat je nodig had via de self-join van de invoergegevens (dus zorg ervoor dat je op zijn antwoord stemt!). Ik heb zijn vraag een beetje opgeschoond qua syntaxis (voortbouwend op zijn vraag!):
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` )
Opmerking 1:ik denk dat @Grijesh en ik tegelijkertijd de syntaxisproblemen van de query aan het opruimen waren. Het is bemoedigend dat we zeer vergelijkbare versies kregen nadat we allebei aan het opruimen waren. Mijn versie verschilt in het gebruik van IFNULL()
voor als er geen voorafgaande gegevens zijn. Ik eindigde ook met een DATE_SUB
, en ik zorgde ervoor dat ik verschillende datums reduceerde tot louter datums zonder tijdcomponent, via DATE()
Opmerking 2:ik had oorspronkelijk uw brontabellen niet volledig begrepen, dus ik dacht dat ik een lopende telling in de query moest implementeren. Maar bij beter onderzoek is het duidelijk dat je brongegevens al een lopende telling hebben, dus ik heb dat spul er weer uitgehaald.