Jag skulle vara väldigt försiktig med en sådan här datastruktur. Kontrollera först att alla id
s har exakt ett pris:
select id
from table t
group by id
having count(distinct price) > 1;
Jag tror att den säkraste metoden är att extrahera ett visst pris för varje id
(säg maximalt) och gör sedan aggregeringen:
select sum(price)
from (select id, max(price) as price
from table t
group by id
) t;
Åtgärda sedan din data så att du inte har en upprepad additiv dimension. Det bör finnas en tabell med en rad per id och pris (eller kanske med dubbletter men kontrolleras av ikraftträdande- och slutdatum).
Uppgifterna är förstörda; du ska inte anta att priset är detsamma på alla rader för ett givet id. Du måste kontrollera det varje gång du använder fälten, tills du fixar data.