2013-06-26 81 views
0

我有一個表可能在一列中包含重複值。對於該列中的每個不同值,我只需要選擇索引最小的那一行。我已經嘗試了distinct()min()和group by的很多組合,但一直沒能弄清楚這一點。此查詢將在sql server 2008上運行。SQL:消除在一列中具有一個重複值的行

color | index | user_id | organization_code 
blue  44   xxx   yyy 
blue  66   xxx   yyy 
red  12   aaa   bbb 
white  55   ccc   ddd 
white  68   xxx   yyy 

該查詢將返回第一行,第三行和第四行。

blue  44   xxx   yyy 
red  12   aaa   bbb 
white  55   ccc   ddd 
+0

「一列」,「那列」,...我可以猜測,你在這裏指的是'color',或'user_id '或'organization_code' - 你會不會真的在指定哪一列是「那一列」? –

+0

對不起,但你正確地閱讀我的想法。在我的示例中,顏色列包含感興趣的重複項。其他重複是匆忙輸入的結果。 – user903724

回答

2

不要使用關鍵字index作爲列名。使用窗口函數爲你的問題,看到下面的例子

select color, [index], [USER_ID], organization_code from (
select *, ROW_NUMBER() over (partition by color order by [index]) as ranker from table 
) Z where ranker = 1 
+2

+1爲關鍵字提示。將添加'user_id'也是一個錯誤的列名稱,因爲它是一個函數的名稱。 – jpw

+1

@ 1_CR或者如果你絕對不得不使用一個儲存的關鍵字將其包裝在方括號中,就像[index] – JsonStatham

+0

@SelectDistinct和jpw。更新 – iruvar

相關問題