Realmente el problema no creo que sea del first ni del last, sino que no incluyes los campos que no tengan función de agrupado en el group by
Código SQL
[-]SELECT PUERTOS.TAG,CONTADORES.VALOR,CONTADORES.FECHA
FROM CONTADORES,PUERTOS WHERE DISPOSITIVO='Contador' and
CONTADORES.NUMPUERTO=PUERTOS.NUMPUERTO AND
CONTADORES.IDEQUIPO=PUERTOS.IDEQUIPO AND
(FECHA>='2007-05-15 00:00:00' AND FECHA<'2007-05-16 00:00:00')
GROUP BY TAG ORDER BY FECHA DESC
Esta era tu consulta inicial. Seguramente te dará error porque haces un group by y no hay funciones de agrupado ( first, last, sum, count, ...). Además, todos los campos que pongas que no tengan función, deberán estar en el group by.
Saludos