select add_months(sysdate,-1) from dual select add_months(sysdate,-12) from dual
1楼10分 2楼10分 3楼10分OVER
问一个难的问题如果要取值的日期不存在,如何能够自动取下一日期的值? 如果我要取date为2008-06-28的a、b、c的值,就直接返回date为2008-06-28的a、b、c的值。 如果我要取date为2008-07-02的a、b、c的值,没有date为2008-07-02,就取date为2008-07-01的a、b、c的值;如果没有date为2008-07-01,就取date为2008-06-30的a、b、c的值。以此类推,直到取到最接近日期的a、b、c的值。 就直接返回date为2008-06-28的a、b、c的值。 表 values id date value a 2008-06-30 5 b 2008-06-30 6 c 2008-06-30 7.8 a 2008-06-29 5.3 b 2008-06-29 9 c 2008-06-29 7.2 a 2008-06-28 6.4 b 2008-06-28 7.9 c 2008-06-28 6.1 a 2008-06-27 8.6 b 2008-06-27 6.1 c 2008-06-27 5.7 ...... ...... ......如何用最简单的方法实现,最好只用查询。
select * from ( select a.*,rownum rn from a where id in('a','b','c') and date <=to_date('2008-07-02','yyyy-mm-dd') order by date desc) where rn <=3
select add_months(sysdate,-1) from dual select add_months(sysdate,-12) from dual
select add_months(sysdate,-12) from dual
2楼10分
3楼10分OVER
如果我要取date为2008-06-28的a、b、c的值,就直接返回date为2008-06-28的a、b、c的值。
如果我要取date为2008-07-02的a、b、c的值,没有date为2008-07-02,就取date为2008-07-01的a、b、c的值;如果没有date为2008-07-01,就取date为2008-06-30的a、b、c的值。以此类推,直到取到最接近日期的a、b、c的值。
就直接返回date为2008-06-28的a、b、c的值。
表 values
id date value
a 2008-06-30 5
b 2008-06-30 6
c 2008-06-30 7.8
a 2008-06-29 5.3
b 2008-06-29 9
c 2008-06-29 7.2
a 2008-06-28 6.4
b 2008-06-28 7.9
c 2008-06-28 6.1
a 2008-06-27 8.6
b 2008-06-27 6.1
c 2008-06-27 5.7
......
......
......如何用最简单的方法实现,最好只用查询。
select *
from
( select a.*,rownum rn
from a
where id in('a','b','c')
and date <=to_date('2008-07-02','yyyy-mm-dd')
order by date desc)
where rn <=3