たとえば、C#コードで解決するのは非常に簡単ですが、SQLクエリに書き込む方法はわかりません。ここでSQL Serverでのスライディングウィンドウの機能、高度な計算
は状況です:のは、私は3列(ID, Date, Amount
)を持つテーブルを持っており、ここでいくつかのデータであるとしましょう:
ID Date Amount
-----------------------
1 01.01.2016 -500
2 01.02.2016 1000
3 01.03.2016 -200
4 01.04.2016 300
5 01.05.2016 500
6 01.06.2016 1000
7 01.07.2016 -100
8 01.08.2016 200
私はテーブルから取得したい結果は、この(ID, Amount .... Order By Date
)です。
ID Amount
-----------------------
2 300
4 300
5 500
6 900
8 200
アイデアは分割払いに金額を分配することですが、負の量は、あなたが最後の分割払いの量を削除する必要が戦場に出たときのことです。私はどれくらい明確であるかわからないので、ここに例があります:
私は3つの請求書が500、200、-300であるとしましょう。
私はこれらの請求書を配布し始めると、まず500から200の金額を配達します。しかし、私が3番目の-300に来たら、最後の請求書から削除する必要があります。他のワークス200 - 300 = -100では、2番目の請求書の金額は消えますが、最初の請求書から差し引かれる必要がある-100が残ります。したがって、500 - 100 = 400です。必要な結果は、1行のデータセット(最初の請求書と金額400)です。
最初の請求書がマイナス金額(-500,300,500)の場合の別の例です。 この場合、最初の( - 500)請求書は2番目の請求書を消滅させ、別の200を3番目のものから引き落とします。したがって、結果は次のようになります。第3インボイス(金額300)
これはプログラミング言語のスタック実装のようなものですが、SQL Serverのスライディングウィンドウ関数で作成する必要があります。
誰かが何か考えている場合は、共有してください。
ありがとうございました。
なぜ '300'に等しい '2'の' amount'です。あなたの説明によると、それは '500'(=' -500 + 100')か、そうでないかもしれませんか? –
2の実数は1000ですが、実際は1000(2)-500(1)-200(3)= 300 負の金額は前の金額から差し引く必要がありますが、量は負であり、それはそれの後ろに来る最初の陽性から差し引かれなければならない –
私は第2の行が '4 | 300'であり、第3の行は' 5 | 500'であると信じます –