Eu teria muito cuidado com uma estrutura de dados como essa. Primeiro, verifique se todos os
id
s têm exatamente um preço:select id
from table t
group by id
having count(distinct price) > 1;
Acho que o método mais seguro é extrair um preço específico para cada
id
(diga o máximo) e depois faça a agregação:select sum(price)
from (select id, max(price) as price
from table t
group by id
) t;
Em seguida, corrija seus dados para não ter uma dimensão aditiva repetida. Deve haver uma tabela com uma linha por id e preço (ou talvez com duplicatas, mas controlada por datas efetivas e de término).
Os dados estão confusos; você não deve assumir que o preço é o mesmo em todas as linhas para um determinado id. Você precisa verificar isso toda vez que usar os campos, até corrigir os dados.