SQL 查询以查找每本​​书的最后 issue/return 记录的状态

SQL query to find status of the last issue/return record for each book

书籍table

书籍issue/return记录table

我需要一个 SQL 查询来查找每本书的最后 issue/return 记录的状态

这是我自己完成的程度:

SELECT 
    `Ref_No`, 
     IF(`book_issue_chi`.`Status`='Loaned', 'No', 'Yes') as 'Available on loan' 
FROM `books_chi` 
LEFT JOIN `book_issue_chi` ON `book_issue_chi`.`Book_Number`=`books_chi`.`ID` 

如果书中只有一个 issue/return 记录,这个 return 是正确的,但是如果书上有多个 issue/return 记录,它 return 是错误的。欢迎任何帮助或提示。

books_chi table

book_issue_chi table

mysql查询结果

如何修改SQL查询可以return每本书最后issue/return条记录的状态?请帮忙!谢谢。

在子查询中查找每本书的最大发行日期:

select *
from books_chi b
left join book_issue_chi bi
  on bi.book_number = b.id
  and (bi.book_number, bi.issue_date) in
  (
    select book_number, max(issue_date)
    from book_issue_chi
    group by book_number
  );

备选方案:从 MySQL 8 开始,您可以使用 window 函数 (MAX OVER) 获取每本书的最长发行日期。因此,您只阅读了本期 table 一次。

select *
from books_chi b
left join
(
  select
    book_issue_chi.*,
    max(issue_date) over(partition by book_number) as max_issue_date
  from book_issue_chi
) bi on bi.book_number = b.id
     and bi.issue_date = bi.max_issue_date;