Calculating the maximum seen so far for each point in time
If you need a rolling max you can use both CROSS APPLY or LEFT JOIN, here is the CROSS APPLY version

SELECT Product, Date, Price, b.[Max Price PIT]
FROM   Table1 a
       CROSS APPLY (SELECT MAX(Price) [Max Price PIT]
                    FROM   Table1 b
                    WHERE  a.Product = b.Product
                      AND  a.Date &gt;= b.Date) b


SQLFiddle demo

With SQLServer 2012 or better it'll be possible to use the new ROWS clause to get the same effect

SELECT Product, Date, Price
     , MAX(Price) OVER (PARTITION BY Product ORDER BY [Date] 
                        ROWS UNBOUNDED PRECEDING) [Max Price PIT]
FROM   Table1


The key point is to get all the rows before the current for the group and apply the statistical function only to them, sometime this type of presentation is called "rolling", for example rolling sum/total if you get the total value of cash till the current row.