トリッキーな部分は、四半期の最終日を取得することです。
このソリューションは、目標日から9か月を減算し、'Q'
で切り捨てることにより、範囲の開始日を計算します。 四半期の最初の日を与えるマスク。次に、その日付をもう一度計算します。 、1日を引き、次に12か月を足すと、現在の四半期の最終日が得られます。
with tgt as ( select date '2019-03-30' as dt from dual
union all select date '2019-02-28' as dt from dual
union all select date '2019-04-01' as dt from dual
)
select trunc(tgt.dt - interval '9' month, 'Q') as range_st,
(trunc(tgt.dt - interval '9' month, 'Q') - 1) + interval '12' month as range_end
from tgt
/
そこに滑らかな解決策があるかもしれませんが、これは私のコーヒーブレイクの終わりです:)