You can perform a join on the table to itself.
The following sql should get what you desire:
select
i.Location LocationIn,
o.Location LocationOut,
i.Date Date,
i.Time TimeIn,
o.Time TimeOut
from (select * from TableName where status = 'In') i
left join (select * from TableName where status = 'Out') o
on i.Date = o.Date
The result should be something like:
LocationIn LocationOut Date TimeIn TimeOut
xyz abc 2014-06-06 10:55 04:55
mop nop 2014-06-07 11:00 05:00
abc NULL 2014-06-08 11:00 NULL
The i and o are aliases for the table in question.
You should consider changing the way your data is stored as if you want to track more than one 'in' and 'out' status for a particular day.
I assume the table structure and the Date join will not give you the results you need.
Possibly an extra field/column called track and put a join on the track.
If you add an extra record 'ppp','2014-06-06','5:55','Out'.
Using the above query you would get two records with the Date 2014-06-06.
LocationIn LocationOut Date TimeIn TimeOut
xyz abc 2014-06-06 10:55 04:55
xyz ppp 2014-06-06 10:55 05:55