2015-10-13 63 views
0

我有一张表,我想添加一个列,以便在数据集内第一次出现记录的给定值时显示1。因此,例如,如果我使用ID字段作为查找唯一出现位置的位置,我想要一个“FirstOccur”列(如下所示)将1置于唯一的第一个出现ID数据集中的价值,只是忽略(保持为空)任何其他事件:在第一次出现唯一值时用1标记记录

| ID | FirstOccur | 
|------|--------------| 
| 1 |  1  | 
| 1 |    | 
| 1 |    | 
| 2 |  1  | 
| 2 |    | 
| 3 |  1  | 
| 4 |  1  | 
| 4 |    | 

我有一个工作2步骤方法,首先应用一些排名的SQL,这将使我是这样的:

| ID | FirstOccur | 
|------|--------------| 
| 1 |  1  | 
| 1 |  2  | 
| 1 |  3  | 
| 2 |  1  | 
| 2 |  2  | 
| 3 |  1  | 
| 4 |  1  | 
| 4 |  2  | 

..我只是申请s ome更新SQL以将任何1以上的值清零以获得所需的结果。

我只是想知道是否有一个(更简单)一击方法。

+2

你对每一行的唯一ID?或者,至少有一些方法来确定排序? –

+0

我没有唯一的ID,但我可以通过问题中显示的“ID”字段进行排序,以便它按某种顺序排列。 –

回答

0

假设你有一个创建日期或自动递增的ID或者一些指定的顺序,你可以这样做:

update t 
    set firstoccur = 1 
    where creationdate = (select min(creationdate) 
          from t as t2 
          where t2.id = t.id 
         ); 
+0

我只想指定ID字段本身的排序。当我用'ID'替换'creationdate'时,它只是在'firstoccurr'中对数据集中的每条记录加1。 –

+0

@MattHall。 。 。那是因为'id'在你的表中被重复。您需要一个指定每个“id”的顺序的列。 –