Aktualizacja 1:Oto skrzypce, http://sqlfiddle.com/#!2/818ad /2
, którego użyłem do testowania.
Aktualizacja 2:Oto skrzypce, http://sqlfiddle.com/#!2/3f78d/10
którego użyłem do dalszego udoskonalania/naprawiania, w oparciu o komentarze Sandy'ego.
Aktualizacja 3:Z jakiegoś powodu przypadek, w którym nie ma poprzedniego dnia, nie został poprawnie rozwiązany. Myślałem, że to było. Zaktualizowałem jednak, aby upewnić się, że to działa (trochę kłopotliwe - ale wydaje się, że jest w porządku. Ostatnie skrzypce:http://sqlfiddle.com/#!2/3f78d/45
Myślę, że @Grijesh koncepcyjnie dał ci najważniejszą rzecz, której potrzebowałeś, poprzez samodzielne łączenie danych wejściowych (więc upewnij się, że zagłosujesz na jego odpowiedź!). Poprawiłem nieco jego zapytanie pod względem składni (opierając się na jego zapytaniu!):
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` )
Uwaga 1:Myślę, że @Grijesh i ja w tym samym czasie usuwaliśmy problemy ze składnią zapytania. To zachęcające, że skończyliśmy z bardzo podobnymi wersjami po tym, jak oboje robiliśmy porządki. Moja wersja różni się używaniem IFNULL()
gdy nie ma danych poprzedzających. Skończyło się też na DATE_SUB
, i upewniłem się, że zredukowałem różne daty do samych dat bez składnika czasu, za pomocą DATE()
Uwaga 2:Początkowo nie zrozumiałem w pełni twoich tabel źródłowych, więc pomyślałem, że muszę zaimplementować licznik bieżący w zapytaniu. Ale po dokładniejszej inspekcji jasne jest, że Twoje dane źródłowe mają już bieżącą liczbę, więc wycofałem je z powrotem.