13

私には課題があり、何度も遭遇しましたが、効率的な解決策を見つけることができませんでした。たとえば、銀行口座と、借方から貸方への回転移動に関するデータを含む大きなテーブルがあるとします。

AccountId DebitCredit AsOfDate
--------- ----------- ----------
aaa       d           2018-11-01
aaa       d           2018-11-02
aaa       c           2018-11-03
aaa       c           2018-11-04
aaa       c           2018-11-05
bbb       d           2018-11-02
ccc       c           2018-11-01
ccc       d           2018-11-02
ccc       d           2018-11-03
ccc       c           2018-11-04
ccc       d           2018-11-05
ccc       c           2018-11-06

上記の例では、サブパーティション番号を AccountId と DebitCredit の組み合わせに割り当てたいと思います。このパーティション番号は、DebitCredit がシフトするたびに増加します。つまり、上記の例では、次の結果が必要です。

AccountId DebitCredit AsOfDate   PartNo
--------- ----------- ---------- ------
aaa       d           2018-11-01      1
aaa       d           2018-11-02      1
aaa       c           2018-11-03      2
aaa       c           2018-11-04      2
aaa       c           2018-11-05      2

bbb       d           2018-11-02      1

ccc       c           2018-11-01      1
ccc       d           2018-11-02      2
ccc       d           2018-11-03      2
ccc       c           2018-11-04      3
ccc       d           2018-11-05      4
ccc       c           2018-11-06      5

私はそれを迅速かつ効率的に行う方法を本当に理解できません。操作は、数百万行のテーブルで毎日実行する必要があります。

この例では、すべてのアカウントに対して連続した行があることが保証されています。ただし、もちろん、顧客はその月の 15 日に口座を開設したり、26 日に口座を閉鎖したりする場合があります。

課題は MSSQL 2016 サーバーで解決することですが、2012 (およびおそらく 2008r2) でも機能するソリューションがあればよいでしょう。

ご想像のとおり、借方または貸方の行だけがあるのか​​、それとも口座が毎日回転するのかを判断する方法はありません。

4

3 に答える 3