2009-10-07 67 views
2

我想对两个表执行SQL查询以检索具有特定列(PostID)的多个列是不同的(并且它不是该表的主键)。SQL Server:如何选择1列不同的多列?

此外,我需要所选的不同行是最新的(其中一个检索列是入境日期)。

详细描述:

我建立类似的应用论坛,使用3个表来存储数据。

我使用table1来存储用户的详细信息,table2来存储帖子的元数据,table3来存储帖子的详细信息,更新和回复(postID在table2中是唯一的,指向原始帖子,而在table3中,它是用于显示原始帖子以及更新和回复)。

表列:

  • 表1(用户ID,全名,移动等)
  • 表2(帖子ID,用户ID,EntryDate,删列)
  • 表3(postdetailsId,帖子ID,用户ID,Entrydate等)

我想在gridview中检索1个用户的所有帖子,我的SQL查询使用USERID从表中检索他的所有帖子。但是,它正在检索原始帖子及其所有更新,而我只想检索每篇帖子的最新更新。如何在SQL中完全完成(我知道我可以在C#中使用返回的结果)?

我的查询:

SELECT T1.FullName, T3.PostID, T3.EntryDate, T3.Title 
FROM Table1 as T1, Table3 as T3 
WHERE T3.UserID = T1.UserID 
AND T3.UserID = @UserID 

回答

2

你可以沿着使用它们会给我上T1.FullName错误使用GROUP BY PostIDMAX(EntryDate)

+0

(未在GROUPBY或任何聚合函数使用) – 2009-10-07 10:19:04

+0

okie发现了我的问题.. thx为您的答案:D – 2009-10-08 07:29:03

1
SELECT * 
FROM (
     SELECT posts.*, ROW_NUMBER() OVER (PARTITION BY post_updates.UserID, post_updates.PostID ORDER BY post_updates.EntryDate DESC) AS rn 
     FROM table1 users 
     JOIN table3 post_updates 
     ON  post_updates.userID = users.UserID 
     WHERE users.UserID = @UserID 
     ) q 
WHERE rn = 1 
+0

Thx为您的答案,但是这只返回最新的帖子... 我需要得到所有的帖子.. – 2009-10-07 10:18:16

+0

你说:“我只想ret取消每篇文章的最新更新“。如何能告诉最新的更新? – Quassnoi 2009-10-07 10:57:17

+0

同时,我更新了查询,试一试。 – Quassnoi 2009-10-07 10:58:31