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

Mysql suma rekordów według miesiąca z ostatnich 12 miesięcy

Musisz wykonać sprzężenie zewnętrzne z tabelą zawierającą wiersz dla każdego miesiąca. Zakładając, że nie masz takiej tabeli, możesz utworzyć ją w locie za pomocą zakodowanego na stałe zapytania UNION:

SELECT * FROM
    (SELECT DATE_FORMAT(now(), "%b") as Month
     UNION
     SELECT DATE_FORMAT(now() - INTERVAL 1 MONTH), "%b")
     UNION
     SELECT DATE_FORMAT(now() - INTERVAL 2 MONTH), "%b")
     UNION
     ...
     SELECT DATE_FORMAT(now() - INTERVAL 11 MONTH), "%b")) AS Months
LEFT JOIN (SELECT DATE_FORMAT(drives.timestamp, "%b") AS Month,
                 drives.timestamp,
                 DATE_FORMAT(drives.timestamp, "%d-%m-%Y %H:%i:%s") AS Exact_date,
                 drives.departure,
                 drives.destination,
                 drives.route,
                 CONCAT(drivers.name, " ", drivers.surname) as driver,
                 drivers.id as driver_id
                 FROM drives, drivers WHERE drives.driver = drivers.id 
                 AND drives.timestamp > DATE_SUB(now(), INTERVAL 12 MONTH)) data
ON Months.Month = data.Month
ORDER BY data.timestamp

Każdy miesiąc bez rekordów będzie miał jeden wiersz z NULL w kolumnach danych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę połączyć dwie procedury w jedną, aby wypełnić jedną tabelę, a nie każdą z dwóch procedur wypełniających jej własną tabelę?

  2. Jak działa funkcja RPAD() w MySQL

  3. Mysql:Jak wywołać plik skryptu sql z innego pliku skryptu sql?

  4. Podselekcja lewego łączenia MySQL

  5. Jak uzyskać wynik w postaci liczby całkowitej z zapytania SQL