aggregate on join latest value
As the way your schema current sits, you'll need two parts; the main select statement and (since you are using MySQL, which doesn't support common table expressions), a view in the where clause.  

The view, priveView:

SELECT product_id
, MAX (valid_since) [validSince]
FROM prices
GROUP BY product_id


The select statement:

SELECT SUM (P.Prices)
FROM Prices AS P
INNER JOIN priceView as PV ON P.product_id = PV.Product_Id AND PV.valid_since = P.valid_since 


If possible I would change the schema of your prices tables so that it also includes a column of when the price starts in additional when it ends/changes.  Whatever the current price happens to be has it's "price_end" value set to null.  You'd then be able to avoid the need for an intermediate view that gets the sub-section of rows that apply.