Oracle SQL中的分区排名(Oracle 11g)

时间:2017-01-03 22:42:46

标签: sql oracle greatest-n-per-group window-functions

我在表格中有4列

  • 公司部件号
  • 制造商部件号
  • 订单号
  • 部件收据日期

    实施例

enter image description here

我只想根据最大零件收货日期返回一条记录,这是表格中的第一行(零件收货日期03/31/2015)。

我试过

RANK() OVER (PARTITION BY Company Part Number,Manufacturer Part Number 
            ORDER BY Part Receipt Date DESC,Order Number DESC) = 1

在WHERE语句的末尾,这不起作用。

2 个答案:

答案 0 :(得分:3)

这似乎可以做你想要的:

select t.*
from (select t.*
      from t
      order by partreceiptdate desc
     ) t
where rownum = 1;

答案 1 :(得分:1)

rank()子句中提供了SELECT等分析函数,不能直接在WHERE子句中调用它们。要以您希望的方式使用rank(),必须在子查询中声明它,然后在外部查询的WHERE子句中使用它。像这样:

select company_part_number, manufacturer_part_number, order_number, part_receipt_date
from   ( select t.*, rank() over (partition by...  order by...) as rnk
         from   your_table t
       )
where  rnk = 1

另请注意,您不能拥有类似company part number的列名(包含空格) - 至少除非它们用双引号括起来,这是一种非常糟糕的做法,最好避免使用。< / p>