2010-03-11 42 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) –