Это то, что я придумал и НЕ РЕШАЕТ ВАШУ ПРОБЛЕМУ ТОЧНО, но я чувствую, что мог бы опубликовать этот код, чтобы, по крайней мере, вы поработали с остальными и, возможно, получили ответ, с которым вы можете работать (помнямой комментарий)
DECLARE @TableVar TABLE
(
vnd_nbr INT,
upc_nbr VARCHAR(10),
inv_date DATE,
net_cost DECIMAL(16, 2)
)
INSERT INTO @TableVar
(vnd_nbr,
upc_nbr,
inv_date,
net_cost)
VALUES (183020,
'2840000211',
'23-Dec-2016',
1.47),
(183020,
'2840000211',
'26-Dec-2016',
1.47),
(183020,
'2840000211',
'31-Dec-2016',
1.39),
(183020,
'2840000211',
'2-Jan-2017',
1.39),
(183020,
'2840000211',
'3-Jan-2017',
1.39),
(183020,
'2840000211',
'09-Jan-2017',
1.39),
(183020,
'2840000211',
'12-Jan-2017',
1.39),
(183020,
'2840000211',
'13-Jan-2017',
1.39),
(183020,
'2840000211',
'14-Jan-2017',
1.39),
(183020,
'2840000211',
'16-Jan-2017',
1.39)
SELECT vnd_nbr,
upc_nbr,
net_cost,
Min(Isnull(previous_date, inv_date)) AS StartDate,
Max(inv_date) AS EndDate
FROM (SELECT vnd_nbr,
upc_nbr,
inv_date,
net_cost,
previous_date,
CASE
WHEN Datediff(day, Isnull(previous_date, inv_date), inv_date) <
4 THEN
0
ELSE 1
END GreaterThanFourDays
FROM (SELECT vnd_nbr,
upc_nbr,
inv_date,
net_cost,
Lag(inv_date, 1, NULL)
OVER (
partition BY vnd_nbr, upc_nbr, net_cost
ORDER BY inv_date) AS previous_date
FROM @TableVar) r) rr
GROUP BY greaterthanfourdays,
vnd_nbr,
upc_nbr,
net_cost
ORDER BY Min(inv_date)
Вышеприведенное выводит следующее:
vnd_nbr upc_nbr net_cost StartDate EndDate
183020 2840000211 1.47 2016-12-23 2016-12-26
183020 2840000211 1.39 2016-12-31 2017-01-16
183020 2840000211 1.39 2017-01-03 2017-01-09
Дата начала / окончания не совпадает, но разбивает ее, если она превышает 4 дня / принимает во внимание net_cost.
Как я уже сказал, это точно не решит вашу проблему, но даст вам представление о том, как вы можете делать то, что просите.