SQL Server中如何获取图书借阅表最新记录以筛选可借图书
解决图书可借阅视图的问题
你原来的视图逻辑存在漏洞:它只是筛选了所有已归还的借阅记录,但同一本书只要有过已归还的历史记录就会被纳入结果,完全忽略了这本书可能存在未归还的最新借阅记录。要得到正确的可借阅图书列表,必须先锁定每本书的最新借阅状态,再判断是否已归还。
可以通过窗口函数ROW_NUMBER()实现需求,具体的视图创建代码如下:
CREATE VIEW free_books AS SELECT book_name FROM ( SELECT book_name, date_returned, -- 按图书名称分组,每组内按借阅日期倒序排序,最新的借阅记录标记为1 ROW_NUMBER() OVER (PARTITION BY book_name ORDER BY date_borrowed DESC) AS rn FROM book_borrowing ) AS latest_borrow_records WHERE rn = 1 -- 仅保留每本书的最新借阅记录 AND date_returned IS NOT NULL; -- 最新记录已归还,说明图书当前可借
逻辑说明
- 子查询中,用
ROW_NUMBER()为每本书的所有借阅记录按借阅日期从新到旧编号,最新的记录会被标记为rn=1; - 外层查询只筛选
rn=1的记录(即每本书的当前最新借阅状态),再从中挑选已归还(date_returned不为null)的图书,就是当前真正可借阅的。
用你提供的测试数据验证,该视图会仅返回'To kill a Mockingbird',符合预期。
内容的提问来源于stack exchange,提问作者StudentZF
相关产品推荐
相关产品推荐

