【问题标题】:SQL Server: How to select multiple columns with 1 column being distinct?SQL Server:如何选择多列,其中 1 列不同?
【发布时间】:2009-10-07 09:17:11
【问题描述】:

我正在尝试对两个表执行 SQL 查询,以检索多个列,其中某个列 (PostID) 是不同的(并且它不是该表的主键)。

此外,我需要选择的不同行是最新的(检索到的列之一是输入日期)。

详细说明:

我正在构建一个类似论坛的应用程序,使用 3 个表来存储数据。

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

表格列:

  • table1(用户 ID、全名、手机等)
  • table2(postID、UserID、EntryDate、Deleted 列)
  • table3(postdetailsId、PostID、UserID、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

【问题讨论】:

    标签: asp.net sql-server database


    【解决方案1】:

    您可以将GROUP BY PostIDMAX(EntryDate) 一起使用

    【讨论】:

    • 使用它们会给我一个关于 T1.FullName 的错误(未在 groupby 或任何聚合函数中使用)
    【解决方案2】:
    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
    

    【讨论】:

    • 感谢您的回答,但是这只返回了最新的帖子...我需要获取所有帖子..
    • 您说“我只想检索每个帖子的最新更新”。怎么知道最新的更新?
    • 改写我的问题..想象它作为线程和帖子(每个线程)..你的查询检索所有线程中的最新帖子(单行)..我想要的是检索最新的每个线程的帖子..(多行)
    猜你喜欢
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多