【发布时间】:2016-11-12 13:28:15
【问题描述】:
与此类似:T-SQL incrementing counter based on change in a column value
我有这张桌子:
ID | VALUE
5 | A
6 | A
6 | A
6 | B
6 | A
6 | B
6 | B
6 | A
6 | C
想要的结果是:
ID | VALUE | GROUP
5 | A | 1
6 | A | 2
6 | A | 2
6 | B | 3
6 | A | 4
6 | B | 4
6 | B | 4
6 | A | 5
6 | C | 6
一个新列 (GROUP),其值在前两列每次更改时递增,但在前两列值与前一行相同时不递增。
到目前为止,使用 RANK OVER() 函数,我能达到的最好效果是:
ID | VALUE | GROUP
5 | A | 1
6 | A | 2
6 | A | 2
6 | B | 3
6 | A | 2
6 | B | 3
6 | B | 3
6 | A | 1
6 | C | 4
【问题讨论】:
-
SQL Server 表没有内在顺序。请在您的问题中详细说明如何指定列的顺序。您还应该编辑问题并包含您用于不完美结果的查询。
-
您如何期望优化器知道
6,A在6,B之后而不是在另一个6,A之后?你如何决定顺序? -
数据集按照示例所示从另一个时间戳列中排序。第一行是“最旧”的时间戳,最后一行是“最新”的时间戳。
标签: sql sql-server