2010-03-11 46 views
1

我該如何解決這個問題?我有這樣3行,以便:有關SQL查詢的幫助

ID   THREAD   POST 
1   1    Hello World 
2   2    Hello galaxy 
3   2    Hello people 

我需要一次只使用最低ID每個線程返回ID,線程和郵政。

類似:

SELECT * FROM table WHERE THREAD DISTINT AND ID = MIN(ID) 

編輯:要在這個例子中更加清晰,應該只返回1,行2,因爲3是不是最低的ID與2

線程編輯2:它需要返回兩行1和2

+0

? – beny23

回答

3

在SQL Server 2005及以後:

SELECT t.Id, t.Thread, t.Post 
FROM 
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Thread ORDER BY Id) as RowNumInThread 
FROM table 
) t 
WHERE t.RowNumInThread = 1 
; 

SELECT t.* 
FROM 
(
    SELECT Min(Id) as MinId 
    FROM table 
    GROUP BY Thread 
) tmin 
JOIN 
table t ON t.Id = tmin.Id 
; 
+0

需要爲每個線程返回ID,線程和發佈一次**僅使用最低ID ** –

+0

是的,這就是我的查詢所做的。對於Threads的每個分區,返回RowNumInThread設置爲1的行。 –

+0

對於第二個查詢,我按Thread進行分組,因此子查詢返回的是任何組的最小ID。從樣本數據看,Id是一個獨特的字段,所以我不需要從子查詢中返回Thread。 –

2
​​
1

可以是您使用什麼數據庫嘗試像

SELECT t.* 
FROM Table t INNER JOIN 
     (
      SELECT MIN(ID) MINID, 
        Thread 
      FROM Table 
      GROUP BY Thread 
     ) sub ON t.ID = sub.MINID 
       AND t.Thread = sub.Thread 
+0

Typo ...你不是指tempdb.Thread,你的意思是t.Thread。 Intellisense錯誤我猜... –

+0

Thanx,Sql Server 2008 Intellisense可以是好的和壞的X) –