Byłbym bardzo ostrożny z taką strukturą danych. Najpierw sprawdź, czy wszystkie id
s mają dokładnie jedną cenę:
select id
from table t
group by id
having count(distinct price) > 1;
Myślę, że najbezpieczniejszą metodą jest wyodrębnienie określonej ceny dla każdego id
(powiedz maksimum), a następnie wykonaj agregację:
select sum(price)
from (select id, max(price) as price
from table t
group by id
) t;
Następnie popraw swoje dane, aby nie mieć powtarzającego się wymiaru addytywnego. Powinna istnieć tabela z jednym wierszem na identyfikator i cenę (lub może z duplikatami, ale kontrolowanymi datami wejścia w życie i końcami).
Dane są pomieszane; nie należy zakładać, że cena jest taka sama we wszystkich wierszach dla danego identyfikatora. Musisz to sprawdzić za każdym razem, gdy używasz pól, dopóki nie poprawisz danych.