Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在Sqlserver中查找最后几个不同的记录_Sql Server - Fatal编程技术网

Sql server 在Sqlserver中查找最后几个不同的记录

Sql server 在Sqlserver中查找最后几个不同的记录,sql-server,Sql Server,以下是我在SQLServer中的简化数据库布局: 桌上书: BookID BookName ...... ......... ReviewerID ReviewerName .......... ............ BookID ReviewerID ReviewDate Notes ...... .......... .......... ..... 表格审阅者: BookID BookName ...... ......... ReviewerID R

以下是我在SQLServer中的简化数据库布局:

桌上书:

BookID  BookName
......  .........
ReviewerID  ReviewerName
..........  ............
BookID  ReviewerID  ReviewDate  Notes
......  ..........  ..........  .....
表格审阅者:

BookID  BookName
......  .........
ReviewerID  ReviewerName
..........  ............
BookID  ReviewerID  ReviewDate  Notes
......  ..........  ..........  .....
表格评论:

BookID  BookName
......  .........
ReviewerID  ReviewerName
..........  ............
BookID  ReviewerID  ReviewDate  Notes
......  ..........  ..........  .....
我需要找出最后3本被评论过的“独一无二”的书。例如,如果审阅顺序为
book-a、book-b、book-c、book-c、book-d
,则输出应为
book-d、book-c和book-b


我试过的问题似乎都不起作用。获取书名的内部连接使它更加复杂。非常感谢您的指导。关于。

这可以通过多种方法实现

您可以尝试使用ROW_NUMBER函数,例如:

不确定这是否100%正确,请尝试提供sqlfiddles,以帮助他人帮助您

select TOP 3
    *
from (
    select
        ROW_NUMBER() OVER (
            PARTITION BY
                BookID
            ORDER BY
                ReviewDate DESC
        ) reviewOrder,
        *
    from Reviews
) R
where
    reviewOrder = 1
order by
    ReviewDate DESC

我在查询中编写了逻辑。我还介绍了如何将结果与其他表一起使用(即,
JOIN

;WITH CTE AS
(
    SELECT *,
    -- Get sequence number for all dates for each BOOKID in descending order
    ROW_NUMBER() OVER(PARTITION BY BOOKID ORDER BY REVIEWDATE DESC)RNO      
    FROM [Table Reviews]
)
SELECT TOP 3 TB.BOOKNAME,TR.ReviewerName [LastReviewedBy],C.ReviewDate [LastReviewDate]
FROM CTE C
JOIN [Table Books] TB ON C.BOOKID=TB.BOOKID
JOIN [Table Reviewers] TR ON C.ReviewerID=TR.ReviewerID
WHERE RNO=1
ORDER BY DATEORDER DESC
  • 查看结果
结果


发布一些示例数据和您尝试的查询如何在此处发布一些失败的查询?也许只需要一点小小的改变。谢谢大家的帮助。由于深度和细节,将此标记为答案。欢迎。请随时要求任何更改。:)@彼得