现有一个表:
  REFERENCE_NO(CHAR)  NAME(CHAR)    VALUE(CHAR)
 --------------     -------           -------
  HUB100080 ARRIVE_YY  2003
  HUB100080 HOME_AREA_CODE 2341
  HUB100080 STA_ORDER_NO
  HUB100080 FLAT_NAME
  HUB100080 STREET_NAME sdf
  HUB100080 HOUSE_NUMBER
  HUB100080 IS_US          true 
  HUB100080 ARRIVE_DD  11
  HUB100080 ARRIVE_MM          12
  HUB100080 US_EID
  HUB100080 EMAIL          [email protected]
  HUB100080 MOBILE_NUMBER
  HUB100082 ARRIVE_YY  2003
  HUB100082 HOME_AREA_CODE 3123
  HUB100082 STA_ORDER_NO
  HUB100082 FLAT_NAME
  HUB100082 STREET_NAME asdf
  HUB100082 HOUSE_NUMBER
  HUB100082 IS_US          true
  HUB100082 ARRIVE_DD  23
  HUB100082 ARRIVE_MM          12
  
主键为  REFERENCE_NO+NAME
  
怎样SELECT出这样的REFERENCE_ID,使得:ARRIVE_YY,ARRIVE_MM,ARRIVE_DD 组成的日期小与已知的某个日期如13-11-2003

解决方案 »

  1.   

    select REFERENCE_ID,min(decode(name,ARRIVE_DD,value))||'-'||min(decode(name,ARRIVE_MM,value))||'-'||min(decode(NAME,ARRIVE_YY,VALUE))
    from tabname group by REFERENCE_ID
      

  2.   

    REFERENCE_ID是从哪里来?也是这个表的一个字段吗?
      

  3.   

    SELECT REFERENCE_ID FROM (select distinct REFERENCE_NO,to_date(decode(name,ARRIVE_DD,value)||'-'||decode(name,ARRIVE_MM,value)||'-'||decode(NAME,ARRIVE_YY,VALUE),'dd-mm-yyyy') REFERENCE_ID
    from tabname ) A WHERE A.REFERENCE_ID<TO_DATE('13-11-2003','dd-mm-yyyy') ;
      

  4.   

    select REFERENCE_NO from (select REFERENCE_NO,min(decode(name,'ARRIVE_DD',value,null))||'-'||min(decode(name,'ARRIVE_MM',value,null))||'-'||min(decode(NAME,'ARRIVE_YY',VALUE,null)) rq
    from tb3 group by REFERENCE_NO ) a where rq < '13-11-2003'
      

  5.   

    比较日期写错了,修改
    select REFERENCE_NO from (select REFERENCE_NO,to_date(lpad(min(decode(name,'ARRIVE_DD',value,null)),2,'0')||'-'||lpad(min(decode(name,'ARRIVE_MM',value,null)),2,'0')||'-'||min(decode(NAME,'ARRIVE_YY',VALUE,null)),'DD-MM-YYYY') rq
    from tb3 group by REFERENCE_NO ) a where rq < to_date('13-11-2003','DD-MM-YYYY')