I think this is what your are looking for.
SELECT Temp.siloid, temp.tdate,MAIN.amount
FROM
(
select siloid, MAX(tdate) AS tdate
from dbo.siolstate
group by siloid
) Temp
INNER JOIN dbo.siolstate MAIN ON MAIN.siloid = Temp.siloid AND MAIN.tdate = Temp.tdate