1

SQL のパーティショニングに関する 2 つの質問です。

T-SQL で PARTITION BY を使用する場合、row_number() のようなものに加えて、各パーティションに一意の番号を割り当てる方法はありますか?

たとえば、row_number() は次のようになります。

Action          Timestamp           RowNum
A               '2013-1-10'         1
A               '2013-1-11'         2
B               '2013-1-12'         1
B               '2013-1-13'         2

さらに、各パーティションを一意に識別すると、

Action          Timestamp           RowNum          PartitionNum
A               '2013-1-10'         1               1
A               '2013-1-11'         2               1
B               '2013-1-12'         1               2
B               '2013-1-13'         2               2

次に、パーティション番号でグループ化できます。

私の質問の 2 番目の部分は、どのように各パーティションを分割し、それを繰り返すことができるかということです。たとえば、

for each partition p
   for each row r in p 
       do F(r) 

T-SQLで何か方法はありますか?

4

1 に答える 1

3

使用できますdense_rank()

select  *
,       row_number() over (partition by Action order by Timestamp) as RowNum
,       dense_rank() over (order by Action) as PartitionNum
from    YourTable

SQL Fiddle の例。

T-SQL は反復処理が得意ではありませんが、本当に必要な場合は、カーソルを確認してください。

于 2013-05-21T00:16:10.580 に答える