Если я понимаю вопрос так, как вижу его, то для этого примера данных
CREATE TABLE t1
([Date] DATE, [Store] varchar(2), [Product] varchar(2), [Price] int)
;
INSERT INTO t1
([Date], [Store], [Product], [Price])
VALUES
('20180525', 's1', 'p3', 0),
('20180601', 's1', 'p1', 0),
('20180602', 's1', 'p2', 0),
('20180603', 's2', 'p1', 0),
('20180604', 's1', 'p1', 0)
;
DECLARE @NumOfDays INT = 10
ОП хочет показать ('20180525', 's1', 'p3', 0)
строку, как это было раньше DATEADD( DAY, -@NumOfDays, GETDATE())
дней назад
Поэтому попробуйте это решение
SELECT
--T.Date
[Date] = CAST(DATEADD( DAY, -@NumOfDays, GETDATE()) AS DATE)
,T.Store
,T.Product
,T.Price
FROM dbo.t1 T
INNER JOIN(
SELECT Mxdate = MAX(T2.Date), T2.Store, T2.Product
FROM dbo.t1 T2
GROUP BY T2.Store, T2.Product
) MxDate ON MxDate.Product = T.Product AND MxDate.Store = T.Store
WHERE MxDate.Mxdate < DATEADD( DAY, -@NumOfDays, GETDATE())
UNION
SELECT
T3.Date
,T3.Store
,T3.Product
,T3.Price
FROM dbo.t1 T3
WHERE T3.Date > DATEADD( DAY, -@NumOfDays, GETDATE())
Вывод
Date Store Product Price
2018-05-27 s1 p3 0 --this is the row before the daterange
2018-06-01 s1 p1 0
2018-06-02 s1 p2 0
2018-06-03 s2 p1 0
2018-06-04 s1 p1 0