Предполагая, что ProductCode и EffectDate однозначно идентифицируют строку, вы можете сделать:
SELECT *
FROM productpricehistory
, (SELECT productcode
, MAX(effectdate) effectdate
FROM productpricehistory
GROUP BY productcode) maxhistory
WHERE productpricehistory.productcode = maxhistory.productcode
AND productpricehistory.effectdate = maxhistory.effectdate
AND IsActive = TRUE;
Если ProductCode и EffectDate не уникально идентифицируют строку, вы, вероятно, захотите использовать HistoryId вместо EffectDate, если мы можем предположить, что HistoryId уникален и что увеличение HistoryId означает также увеличение EffectDate.
edit: я понимаю, что я относился к активным иначе, чем вы - я предполагал, что IsActive применяется только к определенной EffectDate, но я вижу, что вы деактивируете весь продукт, установив для его IsActive значение false. Я обновил соответствующим образом, предполагая, что вы можете впоследствии активировать продукт, создав новую строку с IsActive = true.