Sql server 在Sqlserver中查找最后几个不同的记录
以下是我在SQLServer中的简化数据库布局: 桌上书:Sql server 在Sqlserver中查找最后几个不同的记录,sql-server,Sql Server,以下是我在SQLServer中的简化数据库布局: 桌上书: BookID BookName ...... ......... ReviewerID ReviewerName .......... ............ BookID ReviewerID ReviewDate Notes ...... .......... .......... ..... 表格审阅者: BookID BookName ...... ......... ReviewerID R
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
- 查看结果
发布一些示例数据和您尝试的查询如何在此处发布一些失败的查询?也许只需要一点小小的改变。谢谢大家的帮助。由于深度和细节,将此标记为答案。欢迎。请随时要求任何更改。:)@彼得