On a real database this could have been solved using a rank and a pivot.
But since MySQL doesn't support neither, and also not CTEs (Aargh).
You have to use a construct like this:
SELECT
pd,
date,
max(case rank when 1 then time else null end) as time1,
max(case rank when 2 then time else null end) as time2,
max(case rank when 3 then time else null end) as time3
FROM
(
SELECT
pd,
date,
time,
find_in_set
(
time,
(
select group_concat(time order by time)
from MyTable t2
where t1.pd = t2.pd
and t1.date=t2.date
)
) as rank
FROM MyTable t1
) as sub
GROUP BY pd,date
Performance will be horrible if your sets are big.