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

日付範囲の現在の合計-不足している日付を入力します

    不足している月に対応するには、参加するテンプレートテーブルを作成します。

    キャッシングと考えてください。ループしてギャップを埋めるのではなく、カレンダーをデータベースにキャッシュするだけです。

    複数のカレンダー(月の初め、週の初め、銀行の休日、営業日など)をすべて、一連の検索フラグとインデックスを使用して1つのテーブルに結合することもできます。

    あなたは次のようなものになってしまいます...

    SELECT
      calendar.date,
      SUM(data.amt)
    FROM
      calendar
    LEFT JOIN
      data
        ON  data.date >= calendar.date
        AND data.date <  calendar.date + INTERVAL 1 MONTH
    WHERE
          calendar.date >= '20110101'
      AND calendar.date <  '20120101'
    GROUP BY
      calendar.date
    

    編集

    OPが現在の合計を求めていることに気づきました。

    これはSQLで可能ですが、非常に 非効率的な。その理由は、ある月の結果が次の月の計算に使用されないためです。代わりに、現在の合計全体を再度計算する必要があります。

    このため、通常は、上記のように月間合計を計算してから、アプリケーションを使用して繰り返し処理し、現在の合計値を作成することを強くお勧めします。

    本当に SQLで実行する必要があります。次のようになります...

    SELECT
      calendar.date,
      SUM(data.amt)
    FROM
      calendar
    LEFT JOIN
      data
        ON  data.date >= @yourFirstDate
        AND data.date <  calendar.date + INTERVAL 1 MONTH
    WHERE
          calendar.date >= @yourFirstDate
      AND calendar.date <  @yourLastDate
    GROUP BY
      calendar.date
    


    1. mysqlの最初の3文字を削除するにはどうすればよいですか?

    2. SQLServerのストアドプロシージャからパラメータのリストを取得するにはどうすればよいですか

    3. JavaからPL/SQLに配列を返す方法は?

    4. OrmliteまたはsqliteどちらがAndroidの観点に適していますか?