Поскольку у вас есть требование Значение на предыдущую дату , вы должны использовать ROW_NUM Упорядочение по ItemId и дате.
Затем вы делаете два self join на Id плюс RowNum присоединяется к предыдущему (действует до предыдущей даты) и добавляет предложения WHERE
к 1-10-1
WITH Items_Original (itemId, date, val) AS
(
SELECT 1, CONVERT(datetime, '5/1/2011'), 6 UNION ALL
SELECT 2, CONVERT(datetime, '5/1/2011'), 5 UNION ALL
SELECT 3, CONVERT(datetime, '5/1/2011'), 1 UNION ALL
SELECT 1, CONVERT(datetime, '6/1/2011'), 1 UNION ALL
SELECT 2, CONVERT(datetime, '6/1/2011'), 10 UNION ALL
SELECT 3, CONVERT(datetime, '6/1/2011'), 10 UNION ALL
SELECT 1, CONVERT(datetime, '7/1/2011'), 1 UNION ALL
SELECT 2, CONVERT(datetime, '7/1/2011'), 1 UNION ALL
SELECT 3, CONVERT(datetime, '7/1/2011'), 1
),
Items As
(
Select
ROW_NUMBER() OVER(ORDER BY ItemId, Date) AS RowNum, *
FROM Items_Original
)
select *
from Items I1
Inner JOIN Items I2
On I1.itemId = I2.itemId
And I1.RowNum = I2.RowNum-1
Inner JOIN Items I3
On I2.itemId = I3.itemId
And I2.RowNum = I3.RowNum-1
Where 1=1
And I1.val = 1
And I2.val = 10
And I3.val = 1