Mysql
 sql >> база данни >  >> RDS >> Mysql

извлича данни, групирани по месеци, използвайки интервал на mysql

Опитайте това

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

Не правите нищо нередно, но MySQL не може да върне редове в продължение на месеци, които не съществуват във вашия набор от данни. За да разрешите този проблем, трябва сами да предоставите всички месеци (таблица d в тази заявка) и LEFT JOIN ги с резултати от вашия набор от данни




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как трябва да се справя с теглата на дублиращи се записи в индекса за търсене на MyISAM?

  2. Как да намерите дублиращи се записи в MySQL

  3. какво точно прави това Class.forName(com.mysql.jdbc.Driver).newInstance();

  4. Какъв е най-добрият начин за съхраняване на исторически ценоразпис в MySQL таблица?

  5. Ефективно копиране/дублиране/архивиране на таблици на база данни - mysql