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. WM_CONCAT関数に相当するSQLServer

    2. COVID-19パンデミックと戦うための無料の野戦病院データベース

    3. JPAHibernateを使用してMySQLストアドプロシージャを作成する

    4. 列値の代わりに列名を取得する