Select row if column data was not selected
This can easily be done using Postgres' distinct on operator:

select distinct on (book_id) name, title, bookd_id, date
from the_table
order by book_id, date;


This will pick the first row for each book_id based on the date column.