Кажется, вы хотите отметить первое вхождение как уникальное, но не другие.Итак, давайте примем значение сравнения:
select t.*,
(id = min_id) as is_first_occurrence
from t join
(select customer_id, min(id) as min_id
from t
group by customer_id
) tt
on t.customer_id = tt.customer_id;
Для большинства людей флаг «уникальный» будет означать, что общее число равно «1», а не то, что это просто первое появление.Если это то, что вы хотите, то вы можете использовать аналогичную логику:
select t.*,
(id = min_id) as is_first_occurrence,
(cnt = 1) as is_unique
from t join
(select customer_id, min(id) as min_id, count(*) as cnt
from t
group by customer_id
) tt
on t.customer_id = tt.customer_id;
И в MySQL 8+ вы бы использовали оконные функции:
select t.*,
(row_number() over (partition by customer_id order by id) = 1) as is_first_occurrence,
(count(*) over (partition by customer_id) = 1) as is_unique
from t;