oracle 求一个月的前三天和最后一天

现有一个日期维表CLNDR,里面记录了1990-01-01至2030-12-31之间每一天的日期信息,其中有一个trade_f字段表示工作日,我现在想要通过sql获得每个月的前三个工作日和最后一个工作日,麻烦帮忙解释一下,谢谢!
trade_f表示该日期是否为交易易,如trade_f=1 表示是交易日,trade_f=0表示非交易日

第1个回答  2010-05-18
1. 前三个工作日
通过trade_f字段 减去当月的首日,然后按照它们之间的差排序,最小的前3个就是前三个工作日。

select to_date(to_char(日期字段,'yyyy/mm/dd'),'yyyy/mm/dd')-to_date('2010-05-01','yyyy/mm/dd') as trade_f
from CLNDR
where rownum <= 3
and trade_f = 1
order by trade_f

2.最后一个工作日
思路与1一样,通过间差区最大的那一天
select to_date(to_char(日期字段,'yyyy/mm/dd'),'yyyy/mm/dd')-to_date('2010-05-01','yyyy/mm/dd') as trade_f
from CLNDR
where rownum = 1
and trade_f = 1
order by trade_f desc
第2个回答  2010-05-19
个月的前三个工作日和最后一个工作日

select trunc(sysdate)-substr(to_char(sysdate,'yyyy-mm-dd'),9) +1 from dual; 第一个工作日

select trunc(add_months(sysdate,1))-substr(to_char(sysdate,'yyyy-mm-dd'),9) from dual ; 最后一个工作日