Phần khó khăn là nhận được ngày cuối cùng của quý.
Giải pháp này tính toán ngày bắt đầu của phạm vi bằng cách trừ đi 9 tháng từ ngày mục tiêu và sau đó cắt bớt với 'Q'
mặt nạ cho chúng ta ngày đầu tiên của quý. Sau đó, chúng tôi tính toán ngày đó một lần nữa , trừ một ngày rồi cộng mười hai tháng và điều đó cho ngày cuối cùng của quý hiện tại:
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
/
Có thể có một giải pháp tuyệt vời ở đó, nhưng đây là lúc kết thúc thời gian nghỉ giải lao của tôi :)