sql >> Database >  >> RDS >> Mysql

Mysql-som van records per maand voor de afgelopen 12 maanden

U moet een outer join doen met een tabel die voor elke maand een rij bevat. Ervan uitgaande dat u niet over zo'n tabel beschikt, kunt u deze direct maken met een hardgecodeerde UNION-query:

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 maanden zonder records hebben één rij met NULL in de gegevenskolommen.




  1. Wat is transaction.commit() in Hibernate?

  2. Eenvoudig voorbeeld van veel-op-veel-relaties met Sequelize

  3. utl_file.fopen Parameters in Oracle

  4. MySQL:Waarom is DELETE CPU-intensiever dan INSERT?