在 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
这样的列名(其中包含空格)- 至少不能,除非它们用双引号引起来,这是一种非常糟糕的做法,最好避免.
我在 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
这样的列名(其中包含空格)- 至少不能,除非它们用双引号引起来,这是一种非常糟糕的做法,最好避免.