Try this:
WITH T (CODE, IDNR, NAME, LIMIT) AS
(
VALUES
(123, 80, 'XXX', '2019-05')
, (123, 81, 'XXX', '2019-10')
, (124, 80, 'YYY', '2019-01')
, (125, 80, 'ZZZ', '2019-05')
, (125, 81, 'ZZZ', '2019-06')
, (125, 80, 'ZZZ', '2019-07')
, (126, 80, 'III', '2019-05')
, (126, 80, 'III', '2019-09')
, (126, 80, 'III', '2019-07')
, (128, 80, 'AAA', '2021-01')
, (128, 80, 'AAA', '2021-03')
, (128, 80, 'AAA', '2021-05')
, (128, 80, 'AAA', '2021-07')
, (128, 80, 'AAA', '2021-08')
, (128, 80, 'AAA', '2021-09')
)
SELECT
T.*
, COUNT (1) OVER (PARTITION BY CODE) AS COUNT_LIMIT
, CASE
WHEN TO_DATE (LIMIT || '-01', 'YYYY-MM-DD') IN
(
LAG (TO_DATE (LIMIT || '-01', 'YYYY-MM-DD')) OVER (PARTITION BY CODE ORDER BY LIMIT) + 1 MONTH
, LEAD (TO_DATE (LIMIT || '-01', 'YYYY-MM-DD')) OVER (PARTITION BY CODE ORDER BY LIMIT) - 1 MONTH
)
THEN 'YES'
ELSE 'NO'
END AS CON
FROM T
ORDER BY CODE, LIMIT
The result is:
| CODE |
IDNR |
NAME |
LIMIT |
COUNT_LIMIT |
CON |
| 123 |
80 |
XXX |
2019-05 |
2 |
NO |
| 123 |
81 |
XXX |
2019-10 |
2 |
NO |
| 124 |
80 |
YYY |
2019-01 |
1 |
NO |
| 125 |
80 |
ZZZ |
2019-05 |
3 |
YES |
| 125 |
81 |
ZZZ |
2019-06 |
3 |
YES |
| 125 |
80 |
ZZZ |
2019-07 |
3 |
YES |
| 126 |
80 |
III |
2019-05 |
3 |
NO |
| 126 |
80 |
III |
2019-07 |
3 |
NO |
| 126 |
80 |
III |
2019-09 |
3 |
NO |
| 128 |
80 |
AAA |
2021-01 |
6 |
NO |
| 128 |
80 |
AAA |
2021-03 |
6 |
NO |
| 128 |
80 |
AAA |
2021-05 |
6 |
NO |
| 128 |
80 |
AAA |
2021-07 |
6 |
YES |
| 128 |
80 |
AAA |
2021-08 |
6 |
YES |
| 128 |
80 |
AAA |
2021-09 |
6 |
YES |