Denkansatz (nicht getestet):
ich greife mir jeden Termin:
SELECT ...
FROM termin AS ter1
dann hole ich die überlappenden Termine dazu:
LEFT JOIN termin AS ter2
ON ter2.date=ter1.date AND ter2.begin<ter1.end AND ter2.end>ter1.begin
Kalle