日期  代号      编号    币种      金额
2007-06 A Z1 01 200
2007-07 A Z1 01 400
2007-08 A Z2 01 400 其中日期,代号,编号,币种为联合主键.需要求得这样一条记录:
2007-08 A Z1 01 400规则是:假如当前日期是:2007-08.存在"日期DTE='2007-08',代号NO='A',编号CODE='Z2',币种CCY='01' "的记录.那么需要找出:代号NO='A',币种CCY='01' 编号CODE<>'Z2'所有记录,如上面给的示例数据可以得到2条记录:
2007-06 A Z1 01 200
2007-07 A Z1 01 400
再从这2条中取一天日期DTE与当前日期最近的那条记录:
2007-07 A Z1 01 400
最后将日期DTE='2007-07'换成'2007-08',得到需要求的记录:
2007-08 A Z1 01 400这个Sql大家说说怎么写呢?

解决方案 »

  1.   

    select 当前日期, 代号,编号,币种,金额 from Table
    where 日期DTE  <> 当前日期
    and rownum <2
    order by 日期 desc
      

  2.   

    SELECT c.
    FROM 
    (SELECT b.代号, b.编号, b.币种, a.日期
    FROM 
    (SELECT 日期, 代号, 编号, 币种
    FROM table1
    WHERE 日期='200708') a, table1 b
    WHERE b.代号=a.代号
    AND b.币种=a.币种
    AND b.编号<>a.编号
    ORDER BY Abs(b.日期-a.日期)) c
    WHERE ROWNUM<=1
    /