Если вам это нужно, и это не какое-то упражнение, просто создайте столбец «Уровень» в этой таблице и увеличьте «Уровень» дочерней строки на parent.Level + 1 при выполнении операций INSERT или UPDATE.
CREATE TABLE test (
`id` bigint(20) UNSIGNED PRIMARY KEY auto_increment,
`first_name` varchar(255) NOT NULL,
`last_name` varchar(255) DEFAULT NULL,
`level` int(4) NOT NULL DEFAULT 0,
`parent_id` bigint(20) UNSIGNED DEFAULT NULL
);
INSERT INTO test (`first_name`, `last_name`, `level`, `parent_id`)
VALUES ('A', 'A', 0, NULL),
('B1', 'A', 1, 1),
('B2', 'A', 1, 1),
('C1', 'B1', 2, 2),
('C2', 'B1', 2, 2),
('C3', 'B2', 2, 3),
('C4', 'B2', 2, 3),
('D1', 'C1', 3, 4),
('D2', 'C1', 3, 4),
('D3', 'C2', 3, 5),
('D4', 'C2', 3, 5),
('D5', 'C3', 3, 6),
('D6', 'C4', 3, 7);
SELECT
final.`first_name` as`User Name`,
final.`level`,
CASE
WHEN final.`childs` < 2 THEN
'false'
ELSE
'true'
END as `IsCompleted`
FROM (
SELECT
t.`first_name`,
t.`level`,
COUNT(c.`parent_id`) as `childs`
FROM test t
LEFT JOIN (
SELECT
jt1.`parent_id`
FROM test jt1
) as c ON t.`id` = c.`parent_id`
GROUP BY t.`first_name`,
t.`level`
) as final;
БД скрипка