I am trying to get all most recent Paper.material
's for each Book.isbn
. I am using left
to get the base of each Book.isbn
, since they can have a suffix that indicates the revision, for example : 'X1726748384Z1' or 'X1837943875Z2' etc.. I tried over partition by
but it didn't work because MySQL 5.7 doesn't support this. How can I make this work?
GOAL
For each Book.isbn
as X
:
select left(Book.isbn, 11) BaseISBN, Paper.material, Book.date
from Book
join Page on Book.id = Page.book_id
join Paper on Page.id = Paper.page_id
where Book.name = 'world'
and left(Book.isbn, 11) = X <--
and Page.name = 'test'
order by Book.date desc
limit 1
QUERY
select left(Book.isbn, 11) BaseISBN, Paper.material, max(Book.date)
from Book
join Page on Book.id = Page.book_id
join Paper on Page.id = Paper.page_id
where Book.name = 'world'
and left(Book.isbn, 11) in('X1726748384', 'X1837943875')
and Page.name = 'test'
group by left(Book.isbn, 11);
RETURNS
| Book.isbn | Paper.material | max(Book.date) |
|-------------|----------------|----------------------|
| X1726748384 | 10134248300B | 2018-01-01T00:00:00Z |
| X1837943875 | 10985782343F | 2021-01-01T00:00:00Z |
etc...
SHOULD RETURN
| Book.isbn | Paper.material | max(Book.date) |
|-------------|----------------|----------------------|
| X1726748384 | 10985782343E | 2018-01-01T00:00:00Z |
| X1837943875 | 10985782343H | 2021-01-01T00:00:00Z |
etc...
And DDLs of same:
CREATE TABLE `Book` ( `id` INT NOT NULL AUTO_INCREMENT, `isbn` varchar(255), `name` varchar(255), `date` DATETIME, PRIMARY KEY (`id`) ); CREATE TABLE `Page` ( `id` INT NOT NULL AUTO_INCREMENT, `name` varchar(255), `book_id` INT NOT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `Paper` ( `id` INT NOT NULL AUTO_INCREMENT, `material` varchar(255), `page_id` INT NOT NULL, PRIMARY KEY (`id`) ); ALTER TABLE `Page` ADD CONSTRAINT `Page_fk0` FOREIGN KEY (`book_id`) REFERENCES `Book`(`id`); ALTER TABLE `Paper` ADD CONSTRAINT `Paper_fk0` FOREIGN KEY (`page_id`) REFERENCES `Page`(`id`); INSERT INTO `Book` (`isbn`, `name`, `date`) VALUES ('X1234234403', 'hello', '2016-01-01'), ('X1726748384', 'world', '2017-01-01'), ('X1726748384Z1', 'world', '2018-01-01'), ('X1837943875', 'world', '2019-01-01'), ('X1837943875Z1', 'world', '2020-01-01'), ('X1837943875Z2', 'world', '2021-01-01'); INSERT INTO `Page` (`name`, `book_id`) VALUES ('bla', 1), ('test', 2), ('test', 3), ('test', 4), ('test', 5), ('test', 6); INSERT INTO `Paper` (`material`, `page_id`) VALUES ('10134248300A', 1), ('10134248300B', 2), ('10134248300C', 2), ('10985782343D', 3), ('10985782343E', 3), ('10985782343F', 4), ('10985782343G', 5), ('10985782343H', 6);