2011-06-29 18 views
1

我希望得到一個表的子集,這裏的例子:得到一個表的子集在SQL

1 A 
2 A 
3 B 
4 B 
5 C 
6 D 
7 D 
8 D 

我想要得到的唯一的記錄,但與最小ID:

1 A 
3 B 
5 C 
6 D 

如何在SQL Server中編寫SQL?謝謝!最小的ID第一 - 第二列你有(A, B, C)和訂單由ID1, 2, 3

;WITH DataCTE AS 
(
    SELECT ID, OtherCol, 
     ROW_NUM() OVER(PARTITION BY OtherCol ORDER BY ID) 'RowNum' 
    FROM dbo.YourTable 
) 
SELECT * 
FROM DataCTE 
WHERE RowNum = 1 

這種「分區」您的數據:

回答

3
select min(id), othercol 
from thetable 
group by othercol 

,並可能與

order by othercol 

...在最後如果那是重要的

+0

這個工程!多謝! – sbs

4

使用常見表表達式是這樣的。

因此,對於每個「分區」(即第二列的每個值),具有RowNum = 1的條目是第二列的每個值具有最小ID的條目。

+0

@ t-clausen.dk:固定 –

+0

thx for ur answer!但這太複雜了! – sbs

+1

+1 @JohnnySun:它可能看起來很複雜,但一旦理解了查詢的基本結構,分析查詢就很容易,而且如果您想要選擇多個不能位於group by子句中的列,那麼它們就是您所需要的。 – Chandu

2
select min(id), column2 
from table 
group by column2 

它幫助,如果你提供的問題表信息 - 我只是猜測在列名...

3

試試這個:

SELECT MIN(Id) AS Id, Name 
    FROM MyTable 
GROUP BY Name