sql >> データベース >  >> RDS >> Mysql

値が0の月を含め、指定された期間内のすべての月を選択します

    Lievenの回答に同意します。これまでに必要となる可能性のあるすべての月を含むテーブルを作成し、それを使用して結果テーブルに「LEFTJOIN」します。これは非常に小さなテーブルであり、1年に365(ish)行のデータしかありません...そして、このテーブルに最初に入力するコードを簡単に記述できます

    ここでこれを行うと、多くの利点が得られます。たとえば、次のフィールド(および考えられるその他のフィールド)が特定の範囲のすべての月に完全に入力された月次データテーブルを想像してみてください。

    • 日付(例:2009-04-01)
    • 日(例:1)
    • 曜日(例:水曜日)
    • 月(例:4)
    • 年(例:2009)
    • 会計年度(例:2009/10)
    • 財務四半期(例:2009Q1)
    • カレンダークォーター(例:2009Q2)

    次に、これを上記のクエリと組み合わせて、次のようにします。

    SELECT `DT`.`myYear`, `DT`.`myMonth`, 
               AVG(`myTable`.`value1`) as avg_value_1, 
               AVG(`myTable`.`value2`) as avg_value_2
    
    FROM `dateTable` as DT
    LEFT JOIN `myTable`
        ON `dateTable`.`myDate` = `myTable`.`save_date`
    
    WHERE `dateTable`.`myDate` BETWEEN '2009-01-01' AND '2009-07-01'
    
    GROUP BY `DT`.`myYear`, `DT`.`myMonth`
    

    テストテーブルを作成できなかったため、SQLコードにエラーが発生する可能性がありますが、プリンシパルを取得して、ニーズに合わせて変更できることを願っています。

    これを使用して、「GROUP BY」句を「dateTable」テーブルにあるものに変更できます。これにより、四半期、月、日、曜日などで簡単にレポートできます。

    お役に立てば幸いです。



    1. SQL Serverセマンティック検索を使用したWindowsファイルシステムでのドキュメントの保存と分析–パート2

    2. SQL Server2014/2016OLTPワークロードの実用的なプロセッサの選択

    3. SQLiteデータベース全体をSQLファイルにエクスポートする

    4. SQL Serverのdatetime2とsmalldatetime:違いは何ですか?