hola a todos!!
Sin dar muchos mas detalles de la relación existente entre los datos nombre/tipo y suponiendo que el campo tipo solo pude tener dos valores distintos (A, B), una solución para obtener los datos que marcas en el ejemplo puede ser esta:
Código SQL
[-]
SELECT d1.nombre,
t1.id,
t1.tipo,
t1.estado,
t2.id,
t2.tipo,
t2.estado
FROM ( --
-- agrupa por nombre los distintos id de estado
SELECT NOMBRE, MIN(UID) AS m1, MAX(UID) AS m2
FROM ( --
-- seleciona el ultimo id de cada grupo de nombre, estado
SELECT NOMBRE, MAX(ID) AS UID
FROM TABLA_A
GROUP BY NOMBRE, TIPO) d0
GROUP BY nombre) d1
LEFT JOIN tabla_a t1 ON t1.id = m1
LEFT JOIN tabla_a t2 ON t2.id = m2
Si el campo TIPO puede variar entre mas de dos valores distintos, entonces esta solución ya no es correcta.
Este hilo esta en el foro de MS-SQL. Si realmente estas utilizando MSSQL como motor de BBDD puede utilizar también la opción PIVOT, que permite agrupar múltiples registros en varias columnas de un único registro