Here you can generate your expected table
;WITH cte
AS (SELECT DISTINCT T.id,
Item1.*
FROM #temp T
CROSS apply (SELECT item1,
dt
FROM #temp T1
WHERE T1.id = T.id) AS Item1
UNION
SELECT DISTINCT T.id,
Item2.*
FROM #temp T
CROSS apply (SELECT item2,
dt
FROM #temp T1
WHERE T1.id = T.id) AS Item2)
SELECT C.*,
Isnull((SELECT TOP 1 dt
FROM cte
WHERE cte.id = c.id
AND cte.dt < C.dt), C.dt) AS LastRequested
FROM cte C