Sql server 从tblThread ORDER BY Thread\u ID DESC中选择不同的前5个主题ID、线程ID

Sql server 从tblThread ORDER BY Thread\u ID DESC中选择不同的前5个主题ID、线程ID,sql-server,Sql Server,我试图从threads表中返回最新的5个主题,其中包含线程。然后,我还需要连接topic表,以将topic_name+从线程表连接返回到author表并返回author name 如果某个主题在最近的x篇文章中多次出现,我只想要最新(最高)的线程id信息 SELECT distinct top 5 Topic_ID, Thread_ID from tblThread ORDER BY Thread_ID DESC 只返回5个最近的线程ID,如下所示 主题id-线程id 852-2905 852

我试图从threads表中返回最新的5个主题,其中包含线程。然后,我还需要连接topic表,以将topic_name+从线程表连接返回到author表并返回author name

如果某个主题在最近的x篇文章中多次出现,我只想要最新(最高)的线程id信息

SELECT distinct top 5 Topic_ID, Thread_ID from tblThread ORDER BY Thread_ID DESC
只返回5个最近的线程ID,如下所示

主题id-线程id

852-2905

852-2904

850-2903

937-2902

937-2901

我想回去 852-2905+其他字段、主题名称、作者姓名

850-2903+

937-2902+

&下两个主题id


提前感谢:)

像这样的东西应该可以做到这一点(尽管您需要在那里使用真实的表和列):

这不管用吗:

select topic, max(thread) as thread from tblThread
group by topic
order by thread desc
在此之后,您可以做任何您需要的事情。

最终答案:

;WITH CTE AS
(
    SELECT top 10 *, ROW_NUMBER() OVER(PARTITION BY Topic_ID ORDER BY Thread_ID DESC) RN
    FROM tblThread 
    ORDER BY tblThread.Thread_ID DESC
)
SELECT  tblThread.Topic_ID,
        tblThread.Thread_ID,
        tblTopic.Subject,
        tblAuthor.UserName
FROM CTE tblThread
INNER JOIN tblTopic
    ON tblThread.Topic_ID = tblTopic.Topic_ID
INNER JOIN tblAuthor
    ON tblThread.Author_ID = tblAuthor.Author_ID
WHERE RN = 1

您可能应该获取相应的线程ID,其中包含主题上的GROUP BY和线程ID上的MAX,按线程ID DESC排序,并限制为5。然后使用前面集合中的ID查询线程。很抱歉,我没有时间创建一个有效的查询,这只是一个想法。谢谢。当我将此填充到以下内容时:选择前5个tblThread.Topic\u ID,Max(tblThread.Thread\u ID)作为ThreadID,tblTopic.Subject FROM(tblThread.Topic\u ID=tblTopic.Topic\u ID上的tblThread内部连接tblTopic)tblThread.Author\u ID=tblAuthor.Author\u ID组由tblThread.Topic\u ID,tblTopic.主题顺序由ThreadID DESC;它返回正确,但没有作者名称。当我将“tblAuthor.Username”添加到第一行时,我得到错误“列“tblAuthor.Username”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”但当我将其添加到GROUP BY时,我得到的结果不正确。有什么想法吗?把它作为一个派生表使用,然后连接到主表:选择Username from(选择主题,max(thread)…t internal join tblAuthor a on t.topic=a.topic…嗨,拉马克,不知道你是怎么想到这个的,但它使用正确的表名,字段顺序:)
;WITH CTE AS
(
    SELECT top 10 *, ROW_NUMBER() OVER(PARTITION BY Topic_ID ORDER BY Thread_ID DESC) RN
    FROM tblThread 
    ORDER BY tblThread.Thread_ID DESC
)
SELECT  tblThread.Topic_ID,
        tblThread.Thread_ID,
        tblTopic.Subject,
        tblAuthor.UserName
FROM CTE tblThread
INNER JOIN tblTopic
    ON tblThread.Topic_ID = tblTopic.Topic_ID
INNER JOIN tblAuthor
    ON tblThread.Author_ID = tblAuthor.Author_ID
WHERE RN = 1