sencillo :P
Código SQL:
Ver originalCREATE TABLE #temp
(
id INT,
padre INT,
state INT
)
INSERT INTO #temp VALUES (19792 ,-1 ,1)
INSERT INTO #temp VALUES (19793, 19792 ,5)
INSERT INTO #temp VALUES (19794, 19792 ,7)
INSERT INTO #temp VALUES (19799, 19792 ,7)
INSERT INTO #temp VALUES (19795 ,-1 ,1)
INSERT INTO #temp VALUES (19796, 19795 ,5)
INSERT INTO #temp VALUES (19797, 19795 ,7)
INSERT INTO #temp VALUES (19798, 19795 ,8)
SELECT t3.padre FROM(
SELECT COUNT(t1.id) AS total,t1.padre FROM #temp AS t1
LEFT JOIN #temp AS t2 ON (t1.id=t2.padre) WHERE t1.padre<>-1 GROUP BY t1.padre
) t3
LEFT JOIN
( SELECT COUNT(*) total,padre FROM #temp WHERE state IN (5,7) AND padre<>-1 GROUP BY padre) AS t4 ON (t3.padre=t4.padre)
WHERE t3.total=t4.total
aqui se obtiene el padre que tiene los hijos en estado 5 y 7 si te fijas en los datos de ejemplo el query solo regresa el id 19792 porque tiene 2 hijos en 5 y 7 y el 19795 tiene 3 hijos 2 en 5 y 7 y uno en 8 :P, ademas tomo en cuenta que los padres son los que tienen el -1