私は、SQL Server 2012を使用していますし、私のデータは次のようになります。SQLに複数の制約がある場合、同じ値を持つ連続した行数を見つける方法はありますか?
ActivityID ActivityCode Name_of_User ActivityCode_PrevActivity isLastActivityByUserSame
1020 B1 ABE A2 0
1021 A2 BOB A1 0
1022 A2 BOB A2 1
1023 B1 ABE B1 1
1024 B1 ABE B1 1
1025 B2 ABE B1 0
1026 B2 CARL A3 0
1027 A1 CARL B2 0
1028 B8 BOB A2 0
1029 A1 CARL A1 1
1030 B2 ABE B2 1
1031 B4 ABE B2 0
1032 B8 BOB B8 1
1033 A3 BOB B8 0
1034 B4 CARL A1 0
ただ、フィールドが何を表しているかの簡単な概要として:
- のActivityID:テーブルのPK
- アクティビティコード:ユーザのアクティビティのタイプ
- 名前_of_user:ユーザーの名前
- ActivityCode_PrevActivity:ユーザによる最後のアクティビティのアクティビティコード
- isLastActivityByUserSame:ユーザによる最後のアクティビティコードが現在のアクティビティコードと同じであるかどうかを示すのバイナリ値
これ以外にも、手元にあるタスクに役立たない可能性がある他の列がいくつかあります。
Name_of_Userによって、各行に同じ値を持つ連続する行の数の実行カウントを生成したいとします。あなたはそれがどのように見えるかのアイデアを与えるために、ここで意図した結果(新しいConsecActivityCount列に注目してください)です、
Select *,
DENSE_RANK() OVER (PARTITION BY Name_of_User ORDER BY ActivityID) as ConsecReports
FROM ActivityTable
しかし:
ActivityID ActivityCode Name_of_User ActivityCode_PrevActivity isLastActivityByUserSame ConsecActivityCount
1020 B1 ABE A2 0 0
1023 B1 ABE B1 1 1
1024 B1 ABE B1 1 2
1025 B2 ABE B1 0 0
1030 B2 ABE B2 1 1
1031 B4 ABE B2 0 0
1021 A2 BOB A1 0 0
1022 A2 BOB A2 1 1
1028 B8 BOB A2 0 0
1032 B8 BOB B8 1 1
1033 A3 BOB B8 0 0
1026 B2 CARL A3 0 0
1027 A1 CARL B2 0 0
1029 A1 CARL A1 1 1
1034 B4 CARL A1 0 0
は、私のようなものを使用しようとしました私は運がない。
このような列を計算する最も良い方法は何ですか?
ありがとうございます!
アジャイは、このクエリはName_of_UserとActivityCodeでアップデータを分割します。ただし、isLastActivityByUserSameフィールドに '0'が見つかるたびに連続カウントを保持し、カウントを '0'にリセットすることはうまくいきません。あなたのスクリーンショットに記載されているように、この限られたケースでは動作するようですが、大きなサンプルで手動でカウントを行った後、これはオフです –