Order by如何不与Part by一起使用?

时间:2019-11-11 12:02:44

标签: sql oracle window-functions

select a.* 
from (
  select lname,
         lstatus,
         ltime,
         lid,
         row_number() over(partition by ltime,lstatus,lid order by ltime desc) as rm 
  from sortdata
) 
a where a.rm=1;

上述查询的结果是:

jo  doc 10/10/2019  211 1
jo  doc 11/10/2019  211 1
jo  roc 12/10/2019  211 1
jo  woc 13/10/2019  211 1

ltime的数据类型为dat时,请提出提示。

1 个答案:

答案 0 :(得分:0)

修复partition by。如果您想要每lid行:

select a.*
from (select lname, lstatus, ltime, lid,
             row_number() over( partition by lid order by ltime desc) as rn
      from sortdata
     ) a
where a.rn = 1;

通过包含ltime,您将分区大小限制为一行。因此,分区中所有行的row_number()值为1(其中只有一行)。