日期表D_DATE的主要字段如下:
DATE_COED         --日期,如20000101,是自然日
WK_OF_YEAR_CODE   --当天是本年度的第几周
MTH_CODE          --月编号,如1~12
YEAR_CODE         --年编号,如2000~2012
TRD_FLAG          --当天是否是证券交易日,0-否,1-是,所有周六日和国家法定节假日,都是非交易日
还有其它些繁杂字段,应该对写SQL无关紧要,就不列出,比如周开始和结束标志,月开始和结束标志。。
要计算:给定一个日期v_txdate,计算这个日期的上1个交易周的第1和最后1个交易日的日期。
特点:
(1)2011年10月10日,是2011年41周,它的上1个交易周是39周,因为40周全部是放假,结果是 20110926 和 20110930
(2)跨年问题:20110104(2011年第1周)的上1个交易周日期起始日期是20101227 20101231(2010年第52周)表的部分字段数据抽样如下:
DATE_CODE WK_OF_YEAR_CODE MTH_CODE YEAR_CODE TRD_DAILY_FLAG
20000101 52 1 2000 0
20000102 52 1 2000 0
20000103 1 1 2000 1
20000104 1 1 2000 1
20000105 1 1 2000 1
20000106 1 1 2000 1
20000107 1 1 2000 1
20000108 1 1 2000 0
20000109 1 1 2000 0
20000110 2 1 2000 1
20000111 2 1 2000 1
20000112 2 1 2000 1

解决方案 »

  1.   

    select fir_dt,last_dt
    from
    (select wk_of_year_code,min(date_coed) fir_dt,max(date_coed) last_dt
    from d_date a,(select year_code,wk_of_year_code where date_coed='20111010') b
    where trd_flag=1
    and   date_coed<'20111010'
    and   (a.year_code = b.year_code and a.WK_OF_YEAR_CODE  <b.WK_OF_YEAR_CODE 
          or a.year_code < b.year_code)
    group by wk_of_year_code
    order by last_dt desc)
    where rownum <2