up   up up      

解决方案 »

  1.   

    select 旅客姓名,日期,当前交通工具,
      (select max(当前交通工具)keep(dense_rank last order by 当前日期) from 表t where 旅客姓名=x.旅客姓名 
        and 当前日期<x.当前日期)上次交通工具
    from 表t x建旅客姓名、当前日期、当前交通工具 组合索引
      

  2.   


    这个方向应该是对的。
    对于大数据量的查询应该尽量避免使用min,max等分组函数和排序的,因为效率差。
    而旅客又不是每天都出行,所以只是通过sql的优化是无法避免对于过去记录的max或者排序的。建议楼主使用触发器做成一张记录表。
    专门记录旅客最后一次出行使用交通工具的信息。
    这样在查询的时候就可以方便的取出最后一次的出行信息。
    这时候应该可以用到唯一的索引,大大提高检索效率。但是这里有一个前提就是对于同一个旅客的数据在进入数据库的时候,日期必须是最新的。
    也就是说数据库里面已经存在20140602的数据的时候,是不可以插入20140508的数据的,不知道能不能在业务上面保证这种数据的不出现。
      

  3.   

    用lag()over() 或者是lead()over() 看你的排序时间怎么弄的