SQL 服务器:仅标记第一个重复行
SQL Server: Flag only First duplicate row
我只想标记下面显示的数据集中第一个重复的 ID
-VL
组合。 FirstOccurence
列是我想要的最终结果。
ID VL FirstOccurence
1 a 1
1 b 1
2 a 1
2 a 0
3 a 1
3 a 0
4 a 1
4 a 0
5 a 1
5 b 1
5 a 0
目前在原始 table 中没有可用的唯一索引。
有没有办法用 LAG
功能来做到这一点?我在网上找不到任何导致重复标记的示例。非常感谢任何建议!
亲切的问候,
伊戈尔
一种方法是使用 ROW_NUMBER()
和 CASE
表达式:
SELECT
ID
,VL
,CASE ROW_NUMBER() OVER(PARTITION BY ID, VL ORDER BY ID, VL) WHEN 1 THEN 1 ELSE 0 END AS FirstOccurance
FROM dbo.example
ORDER BY
ID
,VL
,FirstOccurance;
结果:
+----+----+----------------+
| ID | VL | FirstOccurance |
+----+----+----------------+
| 1 | a | 1 |
| 1 | b | 1 |
| 2 | a | 0 |
| 2 | a | 1 |
| 3 | a | 0 |
| 3 | a | 1 |
| 4 | a | 0 |
| 4 | a | 1 |
| 5 | a | 0 |
| 5 | a | 1 |
| 5 | b | 1 |
+----+----+----------------+
请注意,此结果顺序与您的最终结果不同。如果 table 中有一列或多列提供与您提问的结果相同的顺序,请改为在 ORDER BY
子句中指定。
我只想标记下面显示的数据集中第一个重复的 ID
-VL
组合。 FirstOccurence
列是我想要的最终结果。
ID VL FirstOccurence
1 a 1
1 b 1
2 a 1
2 a 0
3 a 1
3 a 0
4 a 1
4 a 0
5 a 1
5 b 1
5 a 0
目前在原始 table 中没有可用的唯一索引。
有没有办法用 LAG
功能来做到这一点?我在网上找不到任何导致重复标记的示例。非常感谢任何建议!
亲切的问候, 伊戈尔
一种方法是使用 ROW_NUMBER()
和 CASE
表达式:
SELECT
ID
,VL
,CASE ROW_NUMBER() OVER(PARTITION BY ID, VL ORDER BY ID, VL) WHEN 1 THEN 1 ELSE 0 END AS FirstOccurance
FROM dbo.example
ORDER BY
ID
,VL
,FirstOccurance;
结果:
+----+----+----------------+
| ID | VL | FirstOccurance |
+----+----+----------------+
| 1 | a | 1 |
| 1 | b | 1 |
| 2 | a | 0 |
| 2 | a | 1 |
| 3 | a | 0 |
| 3 | a | 1 |
| 4 | a | 0 |
| 4 | a | 1 |
| 5 | a | 0 |
| 5 | a | 1 |
| 5 | b | 1 |
+----+----+----------------+
请注意,此结果顺序与您的最终结果不同。如果 table 中有一列或多列提供与您提问的结果相同的顺序,请改为在 ORDER BY
子句中指定。