Мы можем попытаться использовать LEAD/LAG
здесь, чтобы сравнить текущую HPDATUM
дату с теми, которые идут до / после в последовательности, для каждой группы начислений.
WITH cte AS (
SELECT CHARGE, HPDATUM,
LAG(HPDATUM, 1, DATEADD(year, -1, HPDATUM)) OVER (PARTITION BY CHARGE ORDER BY HPDATUM) HPDATUM_PREV,
LEAD(HPDATUM, 1, DATEADD(year, 1, HPDATUM)) OVER (PARTITION BY CHARGE ORDER BY HPDATUM) HPDATUM_NEXT
FROM dbo.table123
)
SELECT CHARGE, HPDATUM
FROM cte
WHERE
DATEDIFF(year, HPDATUM, HPDATUM_PREV) >= 1 AND
DATEDIFF(year, HPDATUM, HPDATUM_NEXT) >= 1;
Если вы хотите толькопроверьте в одном направлении, затем удалите одну из двух проверок опережения / отставания.Кроме того, если вы хотите видеть только один заряд, добавьте предложение WHERE
к CTE.