Не знаю много о синтаксисе оракула, но, по-видимому LAG и LEAD доступны начиная с версии 8.1.6: https://oracle-base.com/articles/misc/lag-lead-analytic-functions
То, что вы хотите сделать, это обновление таблицы для строк с где положение вычислив следующее:
LAG(Check,2) OVER (partition by Code order by month) = 'Y'
Таким образом, выражение будет верно для каждого кода, где Месяц равен 2 от месяца с чек = y.
Сообщите мне, если это работает, я работаю только с SQL Server.
Если бы это был SQL Server код будет
UPDATE t
SET Glidepath = 'Y'
FROM dbo.table as t
WHERE LAG(t.[Check],2) OVER (PARTITION BY t.[Code] ORDER BY t.[MONTH]) = 'Y'
Edit: Oto отметил в комментариях, что это работает только, если вы каждый месяц, представленных в наборе данных. Если вам необходимо проверить точное использование даты этого вместо (и если вы заботитесь только о том годе + месяц части преобразовать каждое значение для [Месяца] к соответствующему зернистости):
/*what is the dateadd equivelent in oracle? ADD_MONTHS?*/
UPDATE t1
SET Glidepath = 'Y'
FROM dbo.[table] AS t1
WHERE EXISTS (SELECT * FROM dbo.[table] AS t2 WHERE t2.[Month] = DATEADD(MONTH, -2, t1.[MONTH]) AND t2.[Code] = 'Y')
Он работал отлично, я бы подумал о Лаг/Свинец! Спасибо за совет! – Aurax22
@ Давид - и что, если есть не весь месяц, например, есть только: '2017-04, 2017-05, 2017-11'. В этом случае через 2 месяца с '2017-04' будет' 2017-11'. нет? –
@Oto Я не предполагал каких-либо предполагаемых функциональных возможностей из поля месяца, я интерпретировал этот вопрос как «строку 2-го от той, которая имеет код =« Y », когда упорядочен столбцом« месяц ». –