Find Rows with the Minimum Date per Group
If you are using SQL Server 2005 onward you can use the ROW_NUMBER() function:

WITH cte_GetLatest
AS
(
  SELECT ID, [Date], Alloc, Prod, Water, Tub, Cas,
         ROW_NUMBER() OVER (PARTITION BY ID,
                                         Alloc, 
                                         Prod, 
                                         Water, 
                                         Tub, 
                                         Cas 
                            ORDER BY Date) as rownumber
  FROM Example


)
SELECT *
FROM cte_GetLatest
WHERE rownumber = 1


Lothar