Answer:
with species_transactions as
(select c.species,
t.transactiondate
from orders o
join transaction t on o.orderid = t.orderid
join customers c on o.customerid = c.customerid)
select distinct species,
first_value(transactiondate) over (partition by species
order by transactiondate asc) as firsttransactiondate
from species_transactions;