在 Oracle SQL (Oracle 11g) 中排名超过分区依据

Rank Over Partition By in Oracle SQL (Oracle 11g)

我在 table

中有 4 列

我只想 return 一条基于最大零件接收日期的记录,这将是 table 中的第一行(零件接收日期为 03/31/2015 的那个)。

我试过了

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

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

这似乎可以满足您的要求:

select t.*
from (select t.*
      from t
      order by partreceiptdate desc
     ) t
where rownum = 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 这样的列名(其中包含空格)- 至少不能,除非它们用双引号引起来,这是一种非常糟糕的做法,最好避免.