आपके द्वारा आजमाए गए समाधान के साथ समस्या यह है कि आप एक चरण से चूक रहे हैं।
यदि आपके क्वार्टर "मानक" तिमाहियों से एक महीने दूर हैं, तो - एक तारीख दी गई है, कोई भी तारीख - आपको तारीख को एक महीने आगे बढ़ाना होगा, फिर तिमाही में कटौती करें और फिर एक महीने तक वापस खींच लें। आपने चरण 2 और 3 किया लेकिन आप चरण 1 को याद कर रहे हैं।
with
inputs ( dt ) as (
select to_date('02-Jan-18', 'dd-Mon-yy') from dual union all
select to_date('02-Feb-18', 'dd-Mon-yy') from dual union all
select to_date('05-Mar-18', 'dd-Mon-yy') from dual union all
select to_date('08-Apr-18', 'dd-Mon-yy') from dual union all
select to_date('05-May-18', 'dd-Mon-yy') from dual union all
select to_date('05-Jun-18', 'dd-Mon-yy') from dual union all
select to_date('05-Jul-18', 'dd-Mon-yy') from dual union all
select to_date('09-Aug-18', 'dd-Mon-yy') from dual union all
select to_date('10-Sep-18', 'dd-Mon-yy') from dual union all
select to_date('11-Oct-18', 'dd-Mon-yy') from dual union all
select to_date('11-Nov-18', 'dd-Mon-yy') from dual union all
select to_date('11-Dec-18', 'dd-Mon-yy') from dual
)
select dt,
add_months(trunc(add_months(dt, 1), 'q'), -1) as qtr
from inputs;
DT QTR
--------- ---------
02-Jan-18 01-Dec-17
02-Feb-18 01-Dec-17
05-Mar-18 01-Mar-18
08-Apr-18 01-Mar-18
05-May-18 01-Mar-18
05-Jun-18 01-Jun-18
05-Jul-18 01-Jun-18
09-Aug-18 01-Jun-18
10-Sep-18 01-Sep-18
11-Oct-18 01-Sep-18
11-Nov-18 01-Sep-18
11-Dec-18 01-Dec-18