Both are Crystal solutions but I will use the group select expert here.
You may need to tweak my logic but this concept should work if you allways have both and A and B.
Pull all data with no record level selction unless you need to limit the data in some other way.
Group on Events.ID
create to formulas
B_date as
if Eventtypes.Eventname = "B" then Events.Eventdate else currentdate + 1
A_date
if Eventtypes.Eventname = "A" then Events.Eventdate else currentdate + 1
Now make 2 group level summaries using these formula fields
MINIMUM(B_Date,event.eventid)
and
MINIMUM(A_Date,event.eventid)
look in your grop footer and you should see claearly when you have any B that is less then A
Now you can use these in the select expert as a GROUP select
MINIMUM(B_Date,event.eventid) < MINIMUM(A_Date,event.eventid)