SQL Server:跨多个组更新序列号

时间:2015-12-09 22:10:05

标签: sql-server

我想更新一张表:

| id | type_id | created_at | sequence |
|----|---------|------------|----------|
|  1 |       1 | 2010-04-26 | NULL     |
|  2 |       1 | 2010-04-27 | NULL     |
|  3 |       2 | 2010-04-28 | NULL     |
|  4 |       3 | 2010-04-28 | NULL     |

对此(请注意,created_at用于排序,序列为"分组"按type_id):

| id | type_id | created_at | sequence |
|----|---------|------------|----------|
|  1 |       1 | 2010-04-26 |        1 |
|  2 |       1 | 2010-04-27 |        2 |
|  3 |       2 | 2010-04-28 |        1 |
|  4 |       3 | 2010-04-28 |        1 |

同样的问题已经提出但是对于SQL Server。

Link

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER()获取每type_id个切片的序列号。使用CTE可使UPDATE操作更简单:

;WITH ToUpdate AS (
SELECT id, type_id, created_at, sequence,
       ROW_NUMBER() OVER (PARTITION BY type_id ORDER BY created_at) AS newSeq
FROM mytable
)
UPDATE ToUpdate
SET sequence = newSeq

Demo here