2016-08-02 10 views
-1

私は、とりわけ日付と天びんを使用して縦型テーブルを作成しました。私は過去6ヶ月のそれぞれの残高を含む6つの変数を抽出する必要があります。これは信じられないほど簡単に行うべきであるように思えますが、これまで選択肢内でcase文またはif文を使用していたことはありませんでした。SQLからの履歴値の取得

プログラム全体がデータを日付順にループします。私は私の最後の6ヶ月間の各アカウントの残高を与えB1-B6の変数を必要とする

col1 |col2 |account |date |balance |col3 |col4 
-------------------------------------------------------------- 
     |  |123456  |Jul-16 |1200  |  | 
     |  |123456  |Jun-16 |1100  |  | 
     |  |123456  |May-16 |1000  |  | 
     |  |123456  |Apr-16 |900  |  | 
     |  |123456  |Mar-16 |800  |  | 
     |  |123456  |Feb-16 |700  |  | 
     |  |123456  |Jan-16 |600  |  | 
     |  |123456  |Dec-15 |500  |  | 
     |  |123456  |Nov-15 |400  |  | 
     |  |123456  |Oct-15 |300  |  | 
     |  |123456  |Sep-15 |200  |  | 
     |  |123456  |Aug-15 |100  |  | 
     |  |234567  |Jul-16 |-500  |  | 
     |  |234567  |Jun-16 |-400  |  | 
     |  |234567  |May-16 |-600  |  | 
     |  |234567  |Apr-16 |-500  |  | 
     |  |234567  |Mar-16 |-200  |  | 
     |  |234567  |Feb-16 |-400  |  | 
     |  |345678  |Jul-16 |100  |  | 
     |  |345678  |Jun-16 |200  |  | 
     |  |345678  |May-16 |300  |  | 
     |  |345678  |Apr-16 |400  |  | 
     |  |345678  |Mar-16 |500  |  |  

:次のようになり、テーブルで

+4

テーブルの定義、データ、予想される結果を投稿してください。また、RDBMSのベンダーとバージョン。 – vercelli

+0

あなたのテーブルの 'スキーマの概要 'とあなたが望む出力の例を表示すると、助けを得る方が簡単です。 – zulq

+0

私はcase文とifループを使ってみました。データは機密扱いなので、サンプルを掲示する前に医者に診てもらう必要があります。偽のサンプル表を思いつくことができるかどうかはわかりますが、現時点では平等に作業しています。 – Zephyr

答えて

1

これは正確にあなたが探しているものであるかどうかは分かりませんが、6ヶ月以上のアカウントごとに蓄積された残高を探している場合は、以下が役立ちます。機能

SELECT account, SUM(balance) 
    FROM Table_1 
    WHERE date >= '2013-02-02' AND 
      date <= '2013-08-02' 
GROUP BY account 

「BY GROUP」は、それぞれ「アカウント」によって集約変数またはSUM(balance)を要約し、where句は、日付範囲の集計値を返します。他の変数をselect文と 'GROUP BY'に追加することができます。

1

これは基本的にグループあたりの上位N個の問題ですが、毎月一貫して扱いやすいようにデータがあるようです。

select t.* 
from 
    <T> t inner join 
    (select account, max(date) as max_date from <T> group by account) m 
     on m.account = t.account and t.date > max_date - 6 months /* pseudo-code */ 

ビジネスルールに従って6か月のルックバックを計算する必要があります。月末近くの日付(特に2月)にはいくつかの小さな合併症があるかもしれません。がお使いのプラットフォームで動作するようなアプローチのテンプレートに過ぎません。また、仮定に応じて、最適化の可能性があります。

関連する問題