日期:2014-05-17  浏览次数:20890 次

一段时间关系的SQL

T1

CCN,ORDATE,NUM
C,2013-01-05,12
C,2013-01-25,14
C,2013-02-03,21
......
T2
YEAR,BEGIN,P1,P2
2013,2013-01-01,2013-01-26,2013-02-20
......



如果T1.ORDATE的时间在T2的BEGIN到P1,那后面加一个字段P1,如果是在P1到P2之间值就是P2

CCN,ORDATE,NUM,PER
C,2013-01-05,12,P1
C,2013-01-25,14,P1
C,2013-02-03,21,P2

------解决方案--------------------
t2表中的 YEAR =2013  的会有多条记录 还是只有1条记录?
------解决方案--------------------
不明白楼主要干嘛,你是想通过2表联合查询得到最后最后那个样式?
------解决方案--------------------
引用:
T2
每年只有一条记录

因为以前系统是按月分析数据的,但是有些时候是不是按月而是按一段时间,比如P1周期是从2013年1月1日开始到1月26日   1-27到2月的某个日期就是P2周期了。

我没有建表测试,不知道有没有问题:
select t1.*,
       case
         when t1.ORDATE between t2.BEGIN and t2.p1 then
          'P1'
         when t1.ORDATE between t2.p1 and t2.p2 then
          'P2'
       end
  from t1, t2
 where to_char(t1.ORDATE, 'yyyy') = t2.year