Inner join on output of a subquery
You can do all that without subqueries:

SELECT DISTINCT S1.starttime
     , S1.endtime 

  FROM Slot AS S1
  JOIN Slot AS S2  ON S2.assigned_To_Id = S1.assigned_To_Id
                  AND S1.assigned_To_Id IN (2, 3, 4) 
                  AND S1.id != S2.id -- a little trick to prevent joining rows with itself 
                                     -- slightly reduce the derivative table size 
                                     -- and speed up the overall performance

 WHERE S1.starttime &gt;= '2018-08-08 00:00'
   AND S1.endtime &lt;= '2018-08-08 23:59'
   AND S1.freetime &gt; 0 
   AND ( S1.freetime &gt; '00:10:00' 
         OR ( S2.starttime = S1.starttime + INTERVAL 60 MINUTE 
              AND ADDTIME(S1.freetime, S2.freetime) &gt; '00:10:00' ))

 ORDER BY S1.starttime ASC
;


In fact aliasing is not transitive operation in the mysql. Say, simple query 

SELECT 1 AS a, a AS b;


yeild an error Unknown column 'a' in 'field list'. So you can create an alias for the real object not for another alias.