sql >> Databasteknik >  >> RDS >> Mysql

Mysql summa av poster per månad för de senaste 12 månaderna

Du måste göra en yttre sammanfogning med en tabell som innehåller en rad för varje månad. Förutsatt att du inte har en sådan tabell kan du skapa den direkt med en hårdkodad UNION-fråga:

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

Alla månader utan poster kommer att ha en rad med NULL i datakolumnerna.




  1. SQL - hur man väljer flera tabeller och JOIN flera rader från samma kolumn?

  2. Hur man analyserar i PHP och lagrar i databasen?

  3. MySQL dela upp kommaseparerad sträng i temperaturtabell

  4. MySQL Open Balance Kredit Debetsaldo