Lo que tu pides es complicado de entender sin una buena base de sql, sería algo así:
Primero tienes que hacer una query que te agrupe todas las macs que sean iguales, más la fecha máxima por cada una, osea, hay que usar GROUP BY, esta será la subquery que producirá la tabla derivada, y luego con esta "inline view" la comparas con la tabla "macTable" y como ya sabes que tal mac tiene tal tiempo más reciente, ya podrás obtener su status último mediante un INNER JOIN. Así sería la consulta:
- SELECT  
-             finalTable.macDir 
-         ,   finalTable.macTime 
-         ,   finalTable.macStatus     
- FROM 
-     ( SELECT 
-             macDir 
-         ,   MAX( macTime ) AS maxTime 
-     FROM  
-         macTable 
-     GROUP BY 
-         macDir 
-     ) AS lastestValues  
-         INNER JOIN macTable AS finalTable 
-             ON  lastestValues.macDir = finalTable.macDir 
-             AND lastestValues.maxTime = finalTable.macTime 
-   
En mi opinión, si el desarrollo que estás haciendo importan datos pasados, presente y futuros en variadas situaciones, entonces encara tu aplicación utilizando una base de datos temporal, o alguna híbrida que soporte manejo de datos temporales.