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

Mysql-Summe der Datensätze nach Monat für die letzten 12 Monate

Sie müssen eine äußere Verknüpfung mit einer Tabelle erstellen, die eine Zeile für jeden Monat enthält. Angenommen, Sie haben keine solche Tabelle, können Sie sie im Handumdrehen mit einer hartcodierten UNION-Abfrage erstellen:

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

Alle Monate ohne Datensätze haben eine Zeile mit NULL in den Datenspalten.