The outcome you're asking for is ambiguous (which list(s) do you want the latest from?), but here's a couple of ideas:
The stupid way to do it in Oracle: Extract Latest dates from one or the other table, then do the join:
select material, company, ..., quote_price, quote_date,
table1_latest.max_list_date, table1_latest.list_price
from detail_table
left outer join
(select max(date) max_list_date, list_price, material from table1
group by list_price, material) table1_latest
ON detail_table.material = table1_latest.material
EDIT: Do a "full" join, then find the difference between the dates, use the smallest difference
select min(abs(days_diff)) min_days_diff, material, list_price,
list_date, quote_date as closest_quote_date, quote_price as closest_quote_price
from
(select list_table.material, list_table.list_price,
list_table.list_date, quote_table.quote_price,
quote_table.quote_date,
(quote_table.quote_date-list_table.list_date) days_diff
from list_table
left outer join
quote_table
on list_table.material = quote_table.material) joined_table
group by material, list_price, list_date, quote_date, quote_price
The Left Outer Join fetches all of the available quotes for each list price. As long as the two dates are Oracle Date types, you can do the subtraction; it will yield Days difference.