Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso ottenere la differenza tra i singoli valori massimi di giorni diversi?

Aggiornamento 1:ecco un violino, http://sqlfiddle.com/#!2/818ad /2 , che ho usato per i test.
Aggiornamento 2:ecco un violino, http://sqlfiddle.com/#!2/3f78d/10 che ho usato per perfezionare/aggiustare ulteriormente, in base ai commenti di Sandy.
Aggiornamento 3:per qualche motivo il caso in cui non esiste un giorno precedente non è stato affrontato correttamente. Pensavo che era. Tuttavia, ho aggiornato per assicurarmi che funzioni (un po' ingombrante, ma sembra essere giusto. Ultimo violino:http://sqlfiddle.com/#!2/3f78d/45

Penso che @Grijesh ti abbia concettualmente ottenuto la cosa principale di cui avevi bisogno tramite l'auto-unione dei dati di input (quindi assicurati di votare la sua risposta!). Ho ripulito un po' la sua query sulla sintassi (a partire dalla sua query!):

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

Nota 1:penso che @Grijesh e io stessimo risolvendo i problemi di sintassi della query allo stesso tempo. È incoraggiante che siamo finiti con versioni molto simili dopo che entrambi stavamo facendo la pulizia. La mia versione differisce nell'utilizzo di IFNULL() per quando non ci sono dati precedenti. Ho anche finito con un DATE_SUB e mi sono assicurato di ridurre varie date a semplici date senza componente temporale, tramite DATE()

Nota 2:inizialmente non avevo compreso appieno le tabelle di origine, quindi ho pensato di dover implementare un conteggio progressivo nella query. Ma dopo una migliore ispezione, è chiaro che i tuoi dati di origine hanno già un conteggio progressivo, quindi ho ritirato quella roba.