Предполагая, что «последний» определяется по дате (а не по номеру выпуска), этот метод обычно довольно быстрый, при условии приличных показателей:
SELECT
T1.prodid,
T1.issue
FROM
Sales T1
LEFT OUTER JOIN dbo.Sales T2 ON
T2.custid = T1.custid AND
T2.prodid = T1.prodid AND
T2.datesold > T1.datesold
WHERE
T1.custid = @custid AND
T2.custid IS NULL
Обработка 500 тыс. Строк - это то, с чем ноутбук, вероятно, справится без проблем, не говоря уже о реальном сервере, так что я бы избежал денормализации вашей базы данных для «производительности». Не добавляйте дополнительное обслуживание, неточность и, прежде всего, головные боли, отслеживая «последний проданный» где-то еще.
РЕДАКТИРОВАТЬ: я забыл упомянуть ... это не касается конкретно случаев, когда две проблемы имеют одинаковую точную дату. Возможно, вам придется настроить его в соответствии с вашими бизнес-правилами для этой ситуации.