Ik zou heel voorzichtig zijn met een datastructuur als deze. Controleer eerst of alle id
s hebben precies één prijs:
select id
from table t
group by id
having count(distinct price) > 1;
Ik denk dat de veiligste methode is om een bepaalde prijs te extraheren voor elke id
(zeg het maximum) en doe dan de aggregatie:
select sum(price)
from (select id, max(price) as price
from table t
group by id
) t;
Ga vervolgens uw gegevens repareren, zodat u geen herhaalde additieve dimensie krijgt. Er zou een tabel moeten zijn met één rij per ID en prijs (of misschien met duplicaten maar gecontroleerd door ingangs- en einddatums).
De gegevens zijn in de war; je moet er niet vanuit gaan dat de prijs in alle rijen hetzelfde is voor een bepaalde id. U moet dat elke keer dat u de velden gebruikt controleren, totdat u de gegevens corrigeert.