我知道帖子的标题很糟糕,但是听我说。这样的问题在前几天出现了,当我找到解决方法的时候,问题仍然困扰着我。
假设Stackoverflow只有3个表。
Users ( username )
Comments ( comment, creationdate )
UsersCommentsJoin , this is the join table between the first 2 tables.
现在假设我想创建一个查询,返回所有最近2条评论的用户。所以结果集看起来像这样。
|username| most recent comment | second most recent comment|
我该如何创建该查询?我之前通过简单地只返回最新的评论来解决这个问题,甚至没有尝试获得第二个评论,而且男孩,让我告诉你它似乎比我想到的子选择,TOP和其他奇怪的数控杂技更多参与
Bonus Round为什么一些看似简单的查询在逻辑上变成怪物查询,至少从我的菜鸟角度来看?
编辑:我使用的是MS SQL服务器。
答案 0 :(得分:3)
您可以在ROW_NUMBER
WITH UC
AS (SELECT UCJ.userId,
C.comment,
ROW_NUMBER() OVER (PARTITION BY userId
ORDER BY creationdate DESC) RN
FROM UsersCommentsJoin UCJ
JOIN Comments C
ON C.commentId = U.commentId)
SELECT username,
MAX(CASE
WHEN RN = 1 THEN comment
END) AS MostRecent,
MAX(CASE
WHEN RN = 2 THEN comment
END) AS SecondMostRecent
FROM Users U
JOIN UC
ON UC.userId = U.userId
WHERE UC.RN <= 2
GROUP BY UC.userId