求个思路——
问题描述:查询某日期下(),某用户的余额,要求:如果此用户今天没有,则查昨天的,昨天没有再查前天的
头大

解决方案 »

  1.   

    创建日期降序索引
    select .... from table where  date <= 'XXX' and rownum=1 
      

  2.   


    name             time      money
    a               20111117    1
    a               20111118    2
    a               20111116    5
    a               20111113    7
    b               20111111    10
    b               20111120    9
    c               20111116    5
    c               20111114    3 就像这种数据,比如查2011115的  应该是a              20111113      7
    b              20111111      10
    c              20111114      3
    当然还可以再换日期 ,如2011113,则结果又是不一样求个思路,
      

  3.   

    select .... from table where date <= 'XXX' and rownum=1 
      

  4.   

    晕死,rownum=1。。
    不对的,请看看我的数据
      

  5.   

    +1 是不是该对查询数据排下序 order by time desc我的方法
    select max(time) from table where date <= 'XXX'
    不过顶cosio 的方法
      

  6.   

    对不起,没看清楚问题,不好意思
    select t1.* from table t1 ,(select name , max(time) max_t from table  where time  <='XXX' group by name  )t2 where t1.name =t2.name  and  t1.time =t2.max_t     
      

  7.   

    select * from 
    (select t.*,row_number()over(partion by name ordery time desc) rn
       from table t
      where t.time <= 你自己的时间)
    where rn =1 
      

  8.   

    测试数据:CREATE TABLE T7
    (
        NAME VARCHAR(4),
        MyTime DATE,
        Money NUMBER(4)
    );
    INSERT INTO T7 VALUES('a', '17-11月-2011', 1);
    INSERT INTO T7 VALUES('a', '18-11月-2011', 2);
    INSERT INTO T7 VALUES('a', '16-11月-2011', 5);
    INSERT INTO T7 VALUES('a', '13-11月-2011', 7);
    INSERT INTO T7 VALUES('b', '11-11月-2011', 10);
    INSERT INTO T7 VALUES('b', '20-11月-2011', 9);
    INSERT INTO T7 VALUES('c', '16-11月-2011', 5);
    INSERT INTO T7 VALUES('c', '14-11月-2011', 3);
    测试结果:
      

  9.   

    对name进行分组然后查max(time)不就行了吗
      

  10.   

    对name进行分组然后查max(time)
      

  11.   

    额,这个sql估计对大部分人都是简单的吧,,,
    在下比较菜
    结贴了感谢各位热心人
      

  12.   

    with t as
     (select 'a' name, 20111117 time1, 1 money
        from dual
      union all
      select 'a' name, 20111118, 2 money
        from dual
      union all
      select 'a' name, 20111116, 5 money
        from dual
      union all
      select 'a' name, 20111113, 7 money
        from dual
      union all
      select 'b' name, 20111111, 10 money
        from dual
      union all
      select 'b' name, 20111120, 9 money
        from dual
      union all
      select 'c' name, 20111116, 5 money
        from dual
      union all
      select 'c' name, 20111114, 3 money from dual
      
      )
    select * from t where t.time1 <= 20111115