Mira, el problema que tienes viene por dos partes:
Por un lado, no sabes, o al menos se supone que no sabes, cuántos tipos hay inicialmente en esta relación, por lo que la consulta debe ser dinámica (establecerse para un resultado variable de tipos).
Por otro lado, lo que tu quieres no es el tipo, sino la lista de los 5 primeros de cada tipo, con lo que un simple LIMIT sobre un resultado agrupado y con HAVING COUNT(*)=5
no sirve.
Existe una solución que se me ocurre, pero es un poco complicada, ya que requiere tres niveles de subconsultas, y el uso de variables de usuario: Uno para crear las variables, el otro para hacer la cuenta de los tipos, y el restante (exterior) para obtener el resultado.
La idea sería mas o menos así:
Código MySQL:
Ver original IF(@TIP
!= TIPO
, @SUMA
:=0, @SUMA
) num
, IF(@TIP
!= TIPO
, @TIP
:=TIPO
, @TIP
) tip
, ID,
NOMBRE,
TIPO,
@SUMA:=@SUMA+1
) T1
Este esquema, como está,devolvería los cinco primeros, haya o no cinco de cada tipo (ya o probé con una de mis tablas y funciona). SI lo que quieres es una cantidad específica (sólo los que tienen cinco o más tipos), la subconsulta de segundo nivel debe ser reformulada.