CREATE TABLE Продажи (
Магазин VARCHAR(255),
Товар VARCHAR(255),
Дата DATE,
Продавец VARCHAR(255),
Колличество INT
);
INSERT INTO Продажи (Магазин,Товар,Дата,Продавец,Колличество)
VALUES
('M1', 'T1', '2010-01-01', 'P1', 2),
('M1', 'T1', '2010-01-05', 'P2', 1),
('M1', 'T1', '2010-01-29', 'P1', 3),
('M2', 'T1', '2010-01-15', 'P2', 1),
('M1', 'T1', '2010-02-28', 'P1', 3),
('M1', 'T1', '2010-03-10', 'P2', 2),
('M2', 'T1', '2010-04-15', 'P1', 1);
-------------------------------------------------------------------
-------------------------------------------------------------------
WITH ranked_sales AS (
SELECT
Магазин,
Товар,
Дата,
Продавец,
Колличество,
ROW_NUMBER() OVER (PARTITION BY Магазин, Товар ORDER BY Дата) AS ordNo
FROM Продажи
),
lagged_sales AS (
SELECT
r.*,
LAG(Дата) OVER (PARTITION BY r.Магазин, r.Товар ORDER BY r.Дата) AS prevDate
FROM ranked_sales r
)
SELECT
Магазин,
Товар,
Дата,
Продавец,
Колличество,
CASE
WHEN DATEDIFF(DAY, prevDate, Дата) >= 30 OR prevDate IS NULL THEN Дата
ELSE prevDate
END AS Новая_Дата
FROM lagged_sales
ORDER BY Магазин, Товар, ordNo;