Opdatering 1:Her er en violin, http://sqlfiddle.com/#!2/818ad /2
, som jeg brugte til at teste.
Opdatering 2:Her er en violin, http://sqlfiddle.com/#!2/3f78d/10
som jeg brugte til yderligere forfining/fiksering, baseret på Sandys kommentarer.
Opdatering 3:Af en eller anden grund blev sagen, hvor der ikke er nogen foregående dag, ikke behandlet korrekt. Jeg troede det var. Jeg har dog opdateret for at sikre, at det virker (lidt besværligt - men det ser ud til at være rigtigt. Sidste violin:http://sqlfiddle.com/#!2/3f78d/45
Jeg tror, at @Grijesh konceptuelt fik dig det vigtigste, du havde brug for via selv-sammenføjningen af inputdataene (så sørg for at stemme op hans svar!). Jeg har ryddet lidt op i hans forespørgsel om syntaks (ud fra hans forespørgsel!):
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` )
Note 1:Jeg tror, @Grijesh og jeg ryddede op i forespørgselssyntaksproblemerne på samme tid. Det er opmuntrende, at vi endte med meget lignende versioner, efter at vi begge var i gang med oprydning. Min version adskiller sig ved at bruge IFNULL()
når der ikke er nogen forudgående data. Jeg endte også med en DATE_SUB
, og jeg sørgede for at reducere forskellige datoer til blot datoer uden tidskomponent via DATE()
Note 2:Jeg havde oprindeligt ikke helt forstået dine kildetabeller, så jeg tænkte, at jeg skulle implementere en løbende optælling i forespørgslen. Men efter bedre inspektion er det klart, at dine kildedata allerede har en løbende optælling, så jeg tog de ting ud igen.