Also maybe an aggregate will work:
-- Set up sample data, this is a guess of what your current query results look like
-- For the sake of this example webinar #45623 was from 10:00am to 10:30am
-- and webinar #23178 was from 11:00am to 11:30am
set language english;
declare @query_results table (user_name nvarchar(10), event_id int, join_date datetime, attendance nvarchar(15));
insert into @query_results values ('Johnny', 45623, '2013-04-30 09:20', 'Did not attend');
insert into @query_results values ('Johnny', 45623, '2013-04-30 10:01', 'Attended');
insert into @query_results values ('Johnny', 45623, '2013-04-30 10:34', 'Did not attend');
insert into @query_results values ('Janey', 45623, '2013-04-30 10:09', 'Attended');
insert into @query_results values ('Jimmy', 45623, '2013-04-30 10:02', 'Attended');
insert into @query_results values ('Jimmy', 45623, '2013-04-30 10:15', 'Attended');
insert into @query_results values ('Jimmy', 45623, '2013-04-30 10:31', 'Did not attend');
insert into @query_results values ('Missy', 23178, '2013-04-30 11:32', 'Did not attend');
insert into @query_results values ('Janey', 23178, '2013-04-30 11:02', 'Attended');
insert into @query_results values ('Johnny', 23178, '2013-04-30 11:12', 'Attended');
-- The existing query is returning more than one line per user,
-- but we only want to know if the user has attended the event.
-- Write an aggregate query, taking care of which column(s) you need to group by
selectq.user_name,
q.event_id,
min(attendance) as attendance
from @query_results q
group by q.user_name, q.event_id;