WITH t AS ( SELECT 1111 a, 'ff' b, TO_DATE('20130302', 'yyyymmdd') c FROM dual UNION ALL SELECT 1111, 'hg', TO_DATE('20130604', 'yyyymmdd') FROM dual UNION ALL SELECT 1111, 'ff', TO_DATE('20170508', 'yyyymmdd') FROM dual UNION ALL SELECT 2222, 'hj', TO_DATE('20110364', 'yyyymmdd') FROM dual UNION ALL SELECT 2222, 'ff', TO_DATE('20180420', 'yyyymmdd') FROM dual ) SELECT * FROM (SELECT a, b, c , LEAD(c) OVER(PARTITION BY a ORDER BY c) d , COUNT(*) OVER(PARTITION BY a) cnt FROM t WHERE b = 'ff' AND c BETWEEN TO_DATE('20130101', 'yyyymmdd') AND TO_DATE('20150321', 'yyyymmdd') ) WHERE d < ADD_MONTHS(c, 15) AND cnt = 2 ;