Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

tìm nạp dữ liệu được nhóm theo tháng bằng cách sử dụng khoảng thời gian mysql

Thử cái này

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

Bạn không làm gì sai, nhưng MySQL không thể trả về các hàng trong nhiều tháng không tồn tại trong tập dữ liệu của bạn. Để giải quyết vấn đề này, bạn cần cung cấp tất cả các tháng của bản thân (bảng d trong truy vấn này) và LEFT JOIN chúng với kết quả từ tập dữ liệu của bạn




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nâng cấp giản đồ trực tuyến trong MySQL Galera Cluster bằng phương pháp RSU

  2. Làm cách nào để truy xuất mọi bản ghi thứ N từ một bảng?

  3. Máy chủ MYSQL đã biến mất

  4. Xếp hạng dựa trên hai cột

  5. Không tìm thấy tệp Ngoại lệ khi cố gắng tải tệp lên máy chủ xampp từ ứng dụng Android