Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

ambil data yang dikelompokkan berdasarkan bulan menggunakan interval mysql

Coba Ini

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

Anda tidak melakukan kesalahan, tetapi MySQL tidak dapat mengembalikan baris selama berbulan-bulan yang tidak ada dalam kumpulan data Anda. Untuk mengatasi masalah ini, Anda harus menyediakan semua bulan sendiri (tabel d dalam kueri ini) dan LEFT JOIN mereka dengan hasil dari kumpulan data Anda




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jumlah Hari MySQL di dalam DateRange, dalam sebulan (Tabel Pemesanan)

  2. Urutkan desimal di PHP atau MySQL

  3. Ada Pustaka Javascript/Jquery Untuk memvalidasi pernyataan SQL?

  4. Kesalahan fatal:Beberapa data sudah keluar, tidak dapat mengirim file PDF

  5. Menghitung jumlah kata yang cocok