1

关于 SQL 分区的两部分问题。

在 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

然后可以 GROUP BY 分区号。

我的问题的第二部分是,你如何分解每个分区并遍历它,例如,

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 不擅长迭代,但如果你真的需要,请查看cursors

于 2013-05-21T00:16:10.580 回答