2016-09-22 22 views
0

にインクリメント番号と日付でソートは、私は次のようなデータを持っていると言う:TSQL番号行フィールド値の変化に基づいて、重複

X | 2/2/2000 
X | 2/3/2000 
B | 2/4/2000 
B | 2/10/2000 
B | 2/10/2000 
J | 2/11/2000 
X | 3/1/2000 

私はこのようなデータセットを取得したいと思います:

1 | X | 2/2/2000 
1 | X | 2/3/2000 
2 | B | 2/4/2000 
2 | B | 2/10/2000 
2 | B | 2/10/2000 
3 | J | 2/11/2000 
4 | X | 3/1/2000 
私が試してみました

これまでのところ、すべては、各フィールドの値の変更や例では、カウントをリセットする各変更はこれがギャップと島々で1

+0

は、あなたがしようとした結果何だったものの一例を投稿してください。 –

+0

DENSE_RANK()OVER(名前でORDER BY EntryDateでパーティション分割) 1 | X | 2/2/2000 2 | X | 2/3/2000 1 | B | 2/4/2000 2 | B | 2000年2月10日 3 | B | 2/10/2000 1 | J | 2000年2月11日 1 | X | 3/1/2000 – MAV

+0

DENSE_RANK()OVER(ORDER BYの名前) これは、名前ごとに一意の番号となりますが、Xの場合は複製されます。 1 | X | 2/2/2000 1 | X | 2/3/2000 2 | B | 2/4/2000 2 | B | 2/10/2000 2 | B | 2000年2月10日 3 | J | 2000年2月11日 1 | X | 3/1/2000 – MAV

答えて

0

として最後のXを残すナンバリング終わりましたか問題。行番号の相違点を使用することができます。

select dense_rank() over (order by col1, seqnum_1 - seqnum_2) as col0, 
     col1, col2 
from (select t.*, 
      row_number() over (order by col2) as seqnum_1, 
      row_number() over (partition by col1 order by col2) as seqnum_2 
     from t 
    ) t; 

これがなぜ機能するのはちょっと面倒です。サブクエリを実行すると、シーケンス番号がどのように割り当てられているか、その相違点が必要な理由がわかります。あなたはこのように照会することができます

+0

優秀、ありがとうございます。 – MAV

0

SELECT dense_rank() over(order by yourcolumn1), * from yourtable 
+0

その問題は、例の最後のXが、最初のXのグループと異なる番号になる必要があることです。 – MAV

関連する問題