sql >> Databáze >  >> RDS >> Mysql

načíst data seskupená podle měsíce pomocí intervalu mysql

Zkuste toto

SELECT d.y, d.m, p.cnt 
FROM 
    (SELECT a.y, b.m 
    FROM (SELECT 2015 AS Y UNION ALL SELECT 2014 AS Y) a
    CROSS JOIN (SELECT 1 AS m UNION ALL SELECT 2 AS m UNION ALL SELECT 3 AS m UNION ALL SELECT 4 AS m UNION ALL SELECT 5 AS m UNION ALL SELECT 6 AS m UNION ALL SELECT 7 AS m UNION ALL SELECT 8 AS m UNION ALL SELECT 9 AS m UNION ALL SELECT 10 AS m UNION ALL SELECT 11 AS m UNION ALL SELECT 12 AS m) b
    WHERE CONCAT(a.y, '-', b.m, '-01') BETWEEN CURDATE() - INTERVAL 13 MONTH AND CURDATE() - INTERVAL 1 MONTH
    ORDER BY 1, 2) d
    LEFT OUTER JOIN
    (SELECT YEAR(purchasedate) AS Y ,MONTH(purchasedate) AS m, COUNT(*) cnt FROM purchase WHERE productid=1001 AND purchasedate >= CURDATE() - INTERVAL 1 YEAR GROUP BY m, Y) p ON d.m=p.m AND d.y=p.y
ORDER BY 1 DESC, 2

Neděláte nic špatného, ​​ale MySQL nemůže po měsíce vrátit řádky, které ve vaší datové sadě neexistují. Chcete-li tento problém vyřešit, musíte uvést všechny měsíce sami (tabulka d v tomto dotazu) a LEFT JOIN s výsledky z vaší datové sady




  1. mySQL:znaková sada utf8 v tabulce indexu a chyba duplicitního klíče

  2. Chyba cizího klíče MySQL 1005 errno 150 primární klíč jako cizí klíč

  3. postgreSQL.app:vytvoření databáze

  4. Jaké je výchozí chování MySQL ON DELETE?