Sarei molto attento con una struttura dati come questa. Per prima cosa, controlla che tutti gli id
s hanno esattamente un prezzo:
select id
from table t
group by id
having count(distinct price) > 1;
Penso che il metodo più sicuro sia estrarre un prezzo particolare per ogni id
(diciamo il massimo) e quindi esegui l'aggregazione:
select sum(price)
from (select id, max(price) as price
from table t
group by id
) t;
Quindi, vai a correggere i tuoi dati in modo da non avere una dimensione additiva ripetuta. Dovrebbe esserci una tabella con una riga per ID e prezzo (o forse con duplicati ma controllata da date di validità e di fine).
I dati sono incasinati; non dovresti presumere che il prezzo sia lo stesso su tutte le righe per un determinato ID. È necessario verificarlo ogni volta che si utilizzano i campi, fino a quando non si correggono i dati.