日期表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
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
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