我希望根据得分获得前10名帖子,并为每个帖子获得10条评论。 我使用以下查询:
with a as ( SELECt TOP 10 Score,Post.ID as PostID
FROM Post
order by Score desc ), b as
(select PostID,ID as CommentID from PostComment)
select * from a
left join b
on b.PostID = a.PostID
此查询获得前10个帖子,但问题是它获得了此帖子的所有评论。如何修改此查询以获得每篇帖子只有10条评论?
答案 0 :(得分:4)
这些方面的东西都可行。
with a as
(
SELECt TOP 10 Score
, Post.ID as PostID
FROM Post
order by Score desc
), b as
(
select PostID
, ID as CommentID
, ROW_NUMBER() over (partition by PostID order by ID) as RowNum
from PostComment
)
select *
from a
left join b
on b.PostID = a.PostID
where b.RowNum <= 10
答案 1 :(得分:2)
试试这个:
WITH a AS (
SELECT TOP 10
Score ,
Post.ID AS PostID
FROM Post
ORDER BY Score DESC
)
SELECT *
FROM a
OUTER APPLY (
SELECT TOP 10
pc.PostID ,
pc.ID AS CommentID
FROM PostComment pc
WHERE pc.PostID = a.PostID
--ORDER BY SomeColumn
) o
答案 2 :(得分:1)
SELECT
*
FROM
(
SELECT
Score ,
Post.ID AS PostID ,
ROW_NUMBER() OVER ( PARTITION BY p.id ) row_num ,
comms.*
FROM
Post p
OUTER APPLY (
SELECT TOP 10
pc.Comment_PostID ,
pc.ID AS CommentID
FROM
PostComment pc
WHERE
pc.postid = p.id
) comms
) a
WHERE
row_num < 11