有一张,每30秒记录一次一组设备(100台左右)当前的状态,能够保存一月设备的数据。请问我想从中取出离当前时间最近的这组设备的状态,应该怎么取?表中设备号,状态,记录时间等字段。

解决方案 »

  1.   

    select * from 

      select t.*,row_number(partition by 设备号 order by 记录时间) rn from t 

    where rn=1 
      

  2.   

    select * from 

      select t.*,row_number(partition by 设备号 order by 记录时间 desc) rn from t 

    where rn=1
      

  3.   

    max  和row_number都可以,求最优解决方案
      

  4.   

    row_number over(partition by 设备号 order by 记录时间 desc) rn from t  ,应该是这个吧?
      

  5.   

    3楼的回复报错啊,ora-00907:缺失右括号
      

  6.   

    报错了
    ora-00907:缺失右括号
      

  7.   

    报错了
    ora-00907:缺失右括号手打的,sorry
    select * from 

      select t.*,row_number() over(partition by 设备号 order by 记录时间 desc) rn from t 

    where rn=1
      

  8.   

    报错了
    ora-00907:缺失右括号手打的,sorry
    select * from 

      select t.*,row_number() over(partition by 设备号 order by 记录时间 desc) rn from t 

    where rn=1谢谢,
    比我写的效率高很多,3.312秒执行完。我那个5秒多。
    想要个2秒之内完成不知道有没有
      

  9.   

    select * from t a where a.记录时间>(sysdate-肯定有值的时间范围)
     not exists(select 1 from t b where b.设备号=a.设备号 and b.记录时间<a.记录时间)
    或者
    select * from t a where (a.设备号,a.记录时间) in (select 设备号,max(记录时间) from t)有(设备号,记录时间)索引的话,应该很快