2012-01-18 52 views

回答

4
select 
    people, 
    row_number() over(partition by people) as x 
from yourtable 

更新:小反饋意見總結: 戴維科斯塔和APC說,結果是不確定的。也就是說,如果你運行這個查詢tomorow,有可能在某些情況下第一個name1得到id 2。但是,查詢仍然是正確的。 如果您的表有像DateInserted,出生日期或其他屬性,可以使相同的名稱之間的區別,可以改善這種例如查詢:

select 
    people, 
    row_number() over(partition by people order by DateOfBirth) as x 
from yourtable 
+0

只是想添加一個需要注意的是書面的結果是不 - 確定性的,即在每個名稱中,不能保證從一次執行到下一次執行相同的行將被分配1,2,3。爲了確定性,在分析窗口中添加一個ORDER BY'子句;該問題沒有包含足夠的信息來建議適當的排序。 – 2012-01-18 13:27:28

+0

是的,謝謝你戴夫科斯塔太多,我編輯的代碼與人的分區後的人,但直到弗洛林Ghita不會接受此代碼更改,沒有人可以看到這個改進的代碼... – user963601 2012-01-18 13:36:42

+0

@ user963601 - 我投了棄權你的編輯。由PEOPLE排序不會有任何區別,因爲該子句指定分區*內的排序順序*。由於分區是PEOPLE,查詢仍然是非確定性的。您需要的是一種排序順序,這種排序方式對於爲PEOPLE的相同值記錄優先級的方式而言是有意義的。諸如DATE_CREATED之類的列將適合賬單,以便記錄按照最早或最近的順序排列。 – APC 2012-01-18 13:47:40

相關問題