The following query does that by looking at the votes table with votetypeid = 8 (bountystart). From there it is easy to join the winning answer.
with awarded as
, p.parentid questionid
from votes v
inner join posts p on p.id = v.postid
where v.votetypeid = 9 -- award
select top ##maxrows?100##
'site://q/' + cast(v.postid as nvarchar)+ '|' + q.title as [Question]
, v.userid as [User Link]
, a.postid as [Post Link]
, a.owneruserid as [User Link]
from votes v
inner join posts q on q.id = v.postid
left outer join awarded a
on v.postid = a.questionid
and dateadd(d, 8, v.creationdate)
where v.votetypeid = 8 -- bounty start
order by v.creationdate desc
When run today on Stack Overflow your result will look like this:
The first userlink is the user who offered the bounty, the second userlink is the OP of the answer that received the bounty. I included both bounty amounts as only 50% of the awarded bounty amount is given if the system selects the winner (instead of the user who started the bounty) in which case the second amount would then be lower.
In the votes table all creationdates are sanitized and have their time part removed so voters remain anonymous. This is maybe not needed for bounties but the rule applies to the whole table to prevent mishaps (the votes table also include up and down votes).
Keep in mind SEDE is only updated once a week, on Sunday.
Don't forget to check the awesome tutorial that learns you how to get the best out of SEDE.