Я предполагаю, что ваша структура таблицы по именам столбцов здесь, но возвращает ли следующее то, что вы хотите?
select min(calen_dt) as first_business_day
,max(calen_dt) as last_business_day
from put_calen
where calen_dt >= trunc(sysdate,'MM') - interval '1' month
and calen_dt <= trunc(sysdate,'MM') - interval '1' day
and business_day_ind = 'Y';
Если sysdate = "2011-03-31 19:14:32", то trunc(sysdate,'MM')
вернет "2011-03-01 00:00:00"; в основном дата урезана до месяца.
Вы хотели первый и последний рабочий день в предыдущем месяце, поэтому я вычел 1 месяц, чтобы прийти к первому из предыдущего месяца, и 1 день, чтобы прийти в последний день предыдущего месяца. Фильтр business_day_ind = 'Y'
проверяет, чтобы мин / макс учитывались только рабочие дни.
Дайте мне знать, как это работает, или если я неправильно понял ваш вопрос и / или структуру таблицы:)