Tenes 25 máquinas, tomas elestado cada 30 minutos, es decir que tenes 48 datos por día por cada máquina, 1200 datos por día, creo que se podría hacer la grilla completa del día sin que la performaqnce se destruya.
SELECT maquina,;
MAX(IIF(hora="00:00",estado,0)) as t0000,MAX(IIF(hora="00:30",estado,0)) as t0030,;
MAX(IIF(hora="01:00",estado,0)) as t0100,MAX(IIF(hora="01:30",estado,0)) as t0130,;
MAX(IIF(hora="02:00",estado,0)) as t0200,MAX(IIF(hora="02:30",estado,0)) as t0230,;
MAX(IIF(hora="03:00",estado,0)) as t0300,MAX(IIF(hora="03:30",estado,0)) as t0330,;
MAX(IIF(hora="04:00",estado,0)) as t0400,MAX(IIF(hora="04:30",estado,0)) as t0430,;
MAX(IIF(hora="05:00",estado,0)) as t0500,MAX(IIF(hora="05:30",estado,0)) as t0530,;
MAX(IIF(hora="06:00",estado,0)) as t0600,MAX(IIF(hora="06:30",estado,0)) as t0630,;
MAX(IIF(hora="07:00",estado,0)) as t0700,MAX(IIF(hora="07:30",estado,0)) as t0730,;
MAX(IIF(hora="08:00",estado,0)) as t0800,MAX(IIF(hora="08:30",estado,0)) as t0830 ;
...
...
FROM datos GROUP BY maquina WHERE fecha=DATE()
Es un poco tedioso poner las 48 "horas", pero te da un cursor que directamente lo podes poner en un grid, con los scrollbar del mismo; usas dinamic color para las celdas y te queda igual que el "excel". Lógicamente embellece el grid a tu gusto.