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

Mysql sum af poster efter måned for de sidste 12 måneder

Du skal lave en ydre joinforbindelse med en tabel, der indeholder en række for hver måned. Forudsat at du ikke har sådan en tabel, kan du oprette den med det samme med en hårdkodet UNION-forespørgsel:

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 måneder uden registreringer vil have én række med NULL i datakolonnerne.




  1. Er der en måde at se en forberedt forespørgsel, da den vil blive udført på databasen?

  2. Generer SQL Opret scripts til eksisterende tabeller med Query

  3. MySQL COUNT() på tværs af flere kolonner

  4. Mysql - Lagret procedure OUT variabel returnerer null