Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie bekomme ich die Differenz zwischen den einzelnen Maximalwerten verschiedener Tage?

Update 1:Hier ist eine Geige, http://sqlfiddle.com/#!2/818ad /2 , die ich zum Testen verwendet habe.
Update 2:Hier ist eine Geige, http://sqlfiddle.com/#!2/3f78d/10 die ich zur weiteren Verfeinerung/Korrektur verwendet habe, basierend auf Sandys Kommentaren.
Update 3:Aus irgendeinem Grund wurde der Fall, dass es keinen Vortag gibt, nicht korrekt behandelt. Ich dachte es wäre. Ich habe jedoch aktualisiert, um sicherzustellen, dass das funktioniert (ein bisschen umständlich - aber es scheint richtig zu sein. Letzte Geige:http://sqlfiddle.com/#!2/3f78d/45

Ich denke, @Grijesh hat Ihnen konzeptionell die Hauptsache gebracht, die Sie über die Selbstverknüpfung der Eingabedaten benötigt haben (also stellen Sie sicher, dass Sie für seine Antwort stimmen!). Ich habe seine Abfrage hinsichtlich der Syntax ein wenig aufgeräumt (aus seiner Abfrage aufbauend!):

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` )      

Anmerkung 1:Ich denke, @Grijesh und ich haben gleichzeitig die Probleme mit der Abfragesyntax behoben. Es ist ermutigend, dass wir am Ende sehr ähnliche Versionen hatten, nachdem wir beide aufgeräumt hatten. Meine Version unterscheidet sich durch die Verwendung von IFNULL() wenn es keine vorangehenden Daten gibt. Ich endete auch mit einem DATE_SUB , und ich habe darauf geachtet, verschiedene Daten über DATE() auf reine Daten ohne Zeitkomponente zu reduzieren

Anmerkung 2:Ich hatte Ihre Quelltabellen ursprünglich nicht vollständig verstanden, daher dachte ich, ich müsste eine laufende Zählung in die Abfrage implementieren. Aber bei genauerer Betrachtung ist klar, dass Ihre Quelldaten bereits eine laufende Zählung haben, also habe ich das Zeug wieder entfernt.