Aktualizace 1:Zde jsou housle, http://sqlfiddle.com/#!2/818ad /2
, který jsem použil k testování.
Aktualizace 2:Zde jsou housle, http://sqlfiddle.com/#!2/3f78d/10
které jsem použil pro další doladění/opravu, na základě Sandyho komentářů.
Aktualizace 3:Z nějakého důvodu nebyl případ, kdy neexistuje žádný předchozí den, řešen správně. Myslel jsem, že ano. Aktualizoval jsem však, abych se ujistil, že to funguje (trochu těžkopádné – ale zdá se, že je to správné. Poslední housle:http://sqlfiddle.com/#!2/3f78d/45
Myslím, že @Grijesh vám koncepčně sehnal to hlavní, co jste potřebovali, prostřednictvím vlastního spojení vstupních dat (takže nezapomeňte hlasovat pro jeho odpověď!). Trochu jsem vyčistil jeho dotaz v syntaxi (na základě jeho dotazu!):
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` )
Poznámka 1:Myslím, že @Grijesh a já jsme současně řešili problémy se syntaxí dotazů. Je povzbudivé, že jsme skončili s velmi podobnými verzemi poté, co jsme oba dělali čištění. Moje verze se liší v použití IFNULL()
když neexistují žádná předchozí data. Také jsem skončil s DATE_SUB
a ujistil jsem se, že jsem pomocí DATE()
zredukoval různá data na pouhá data bez časové složky
Poznámka 2:Původně jsem úplně nerozuměl vašim zdrojovým tabulkám, takže jsem si myslel, že musím do dotazu implementovat průběžný počet. Ale po lepší kontrole je jasné, že vaše zdrojová data již mají průběžný počet, takže jsem to vzal zpět.