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;
书籍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;