SQL Server加入最新的2个条目

时间:2012-02-11 19:30:18

标签: sql sql-server greatest-n-per-group

我知道帖子的标题很糟糕,但是听我说。这样的问题在前几天出现了,当我找到解决方法的时候,问题仍然困扰着我。

假设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服务器。

1 个答案:

答案 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