2016-04-12 9 views
-2

私は顧客の残高を収めたテーブルを持っています。アカウントの数値が前回のアカウントの残高よりも一定の割合で低下したことを確認する必要があります。SELECTの結果行で数学を実行する

私の出力は、口座ID、年 - 月組合せコード、月末残高で構成されています。だから、2月の残高が1月からX%減少したかどうか、そして1月が12月から同じ%減少したかどうかを確認したい。それが落ちた場合、私はyear_monthコードが入ったのを見たいと思っています。はい、私は複数のドロップで1つのアカウントを持つことができました。

誰でも、これをSQL内でどのように実行するかについてのアイデアはありますか?

EDIT:リクエストされたサンプルデータを追加します。私が見ているテーブルでは、私は年の月をカラムとして持っていますが、月の最後の営業日も取得できます。

account_id | year_month |終了残高

1 | | 2016-1 | 50000

1 | | 2016-2 | 40000

1 | | 2016-3 | 25

出力は、期末残高が前月から少なくとも50%減少した場合のyear_monthコードです。

+0

どのRDBMSを使用していますか? – Quassnoi

+0

私たちはSQLサーバ – danl

+0

を使用しています。 – Quassnoi

答えて

0

まず、この計算でYear_Monthをyyyy-mm-dd形式の日付にすることをおすすめします。次に、現在のテーブルを取得してそれ自体に参加しますが、参加する日付は前月になります。次に、選択項目で計算を実行します。だから、以下のようなことをすることができます。

SELECT x.*, 
     x.EndingBalance - y.EndingBalance 
FROM Balances x 
INNER JOIN Balances y ON x.AccountID = y.AccountID 
        and x.YearMonth = DATEADD(month, DATEDIFF(month, 0, x.YearMonth) - 1, 0) 
+0

返信いただきありがとうございます。この方法では、その後のすべての月が自動的にプルアップされますか、または月に1回のジョインが必要です。 – danl

+0

それはすべての月を引き上げます。あなたの歴史の始まりまでずっと進んでいるなら、LEFT JOINに変更して最初の月が除外されないようにする必要があるかもしれません。 –

関連する問題