日付、通貨、国ごとの履歴cash_balancesを持つテーブルがあります。SQL:前月の最終営業日の2日目から値を取得
前の月の2番目の最終営業日の列 "cash_balance"の値を "cash_balance_last_month"という列に入力する必要があります。前月の2番目の最終日と定義されていますテーブル内のデータ。
ので、テーブルは次のようになります2016-30-03 3月の第二の最後の営業日であることを
report_date/currency/country/cash_balance/cash_balance_last_month
2016-03-05/ USD / US / 110 / NULL
2016-03-05/ EUR / DE / 130 / NULL
2016-03-05/ EUR / FR / 240 / NULL
2016-02-05/ USD / US / 105 / NULL
2016-02-05/ EUR / DE / 125 / NULL
2016-02-05/ EUR / FR / 245 / NULL
2016-29-04/ USD / US / 100 / NULL
2016-29-04/ EUR / DE / 120 / NULL
2016-29-04/ EUR / FR / 250 / NULL
2016-28-04/ USD / US / 95 / NULL
2016-28-04/ EUR / DE / 115 / NULL
2016-28-04/ EUR / FR / 255 / NULL
...
2016-30-03/ USD / US / 90 / NULL
2016-30-03/ EUR / DE / 117 / NULL
2016-30-03/ EUR / FR / 257 / NULL
注意。
表は次のようになります。
report_date/currency/country/cash_balance/cash_balance_last_month
2016-03-05/ USD / US / 110 / 95
2016-03-05/ EUR / DE / 130 / 115
2016-03-05/ EUR / FR / 240 / 255
2016-02-05/ USD / US / 105 / 95
2016-02-05/ EUR / DE / 125 / 115
2016-02-05/ EUR / FR / 245 / 255
2016-29-04/ USD / US / 100 / 90
2016-29-04/ EUR / DE / 120 / 117
2016-29-04/ EUR / FR / 250 / 257
2016-28-04/ USD / US / 95 / 90
2016-28-04/ EUR / DE / 115 / 117
2016-28-04/ EUR / FR / 255 / 257
...
2016-30-03/ USD / US / 90 / NULL
2016-30-03/ EUR / DE / 117 / NULL
2016-30-03/ EUR / FR / 257 / NULL
最初のエントリが、この例2016-30-03では、明らかに参照するために前月必要はありません。
"cash_balance_last_month"という列はどのように計算されますか?私は自分自身でそれを理解することができなかったし、私が解決策を考え出すのに役立つ関連する質問を見つけることもできなかった。
大変助かります。ありがとうございました!
カレンダーテーブルはありますか?あなたがしなければ、 – Squirrel
私はしないでください。 1つではありません。 – SSA
カレンダーの日付に依存しているのではなく、表にデータがあると思われます。テーブル内のデータのrow_numberを計算し、年/月(および国?)順に日付descで区切って、指定された月-1のrow_number = 2の行から値を取得するだけです。 – dean