Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę uzyskać różnicę między indywidualnymi maksymalnymi wartościami różnych dni?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - PHP:wyświetl wyniki w wierszach tabeli (5 wyników w wierszu)

  2. Interfejs API kalendarza Google:wybieranie/tworzenie kalendarzy?

  3. Jak podłączyć MySQL Workbench do Amazon RDS?

  4. mysql nie zlicza wierszy dwa razy, jeśli dane w kolumnie są zduplikowane

  5. MSQL:Jak nadpisać wpis tylko wtedy, gdy nowy jest wyższy? w przeciwnym razie utwórz nowy wpis