Lar*_*ard 8 sql sql-server join distinct
我有以下要查询的查询:
SELECT DISTINCT TOP(5) fp.PostId FROM dbForumPosts fp
LEFT JOIN dbForumEntry fe ON fp.PostId = fe.PostId
Order by fe.Datemade DESC
Run Code Online (Sandbox Code Playgroud)
但是,当我开火时,我收到错误:
Msg 145, Level 15, State 1, Line 1
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Run Code Online (Sandbox Code Playgroud)
我试图更改查询,所以它使用GROUP BY,但后来我有以下问题:
Msg 8127, Level 16, State 1, Line 4
Column "dbForumEntry.Datemade" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
Run Code Online (Sandbox Code Playgroud)
我想要什么:
把它想象成一个论坛.有帖子(dbForumPosts)和条目(dbForumEntry).pr post有0个条目.
我想要的是获取最近活动的帖子(包含最新更新条目的帖子).
你可以找到最近的Datemade
每PostId
用row_number
.然后你可以搜索最近的5个帖子:
select top 5 PostId
from (
select PostId
, Datemade
, row_number() over (partition by PostId
order by Datemade) as rn
from dbForumEntry
) SubQueryAlias
where rn = 1 -- Most recent row per PostId
order by
Datemade desc
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用group by
子查询实现相同的功能:
select top 5 PostId
from (
select PostId
, max(Datemade) as LastDate
from dbForumEntry
group by
PostId
) SubQueryAlias
order by
LastDate desc
Run Code Online (Sandbox Code Playgroud)
如果dbForumEntry
有一个ID列(比方说ForumEntryId
),这样的查询可能会表现得更好.该数据库可以在不编译运行这个row_number
或max(Datemade)
整个表格.
select top 5 PostId
from dbForumPosts fp
where not exists -- No later entry for the same post exists
(
select *
from dbForumPosts fp2
where fp2.PostId = fp.PostId
and fp2.ForumEntryId > fp.ForumEntryId
)
order by
Datemade desc
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8491 次 |
最近记录: |