Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle SQL(Oracle 11g)中按分区排序_Sql_Oracle_Greatest N Per Group_Window Functions - Fatal编程技术网

在Oracle SQL(Oracle 11g)中按分区排序

在Oracle SQL(Oracle 11g)中按分区排序,sql,oracle,greatest-n-per-group,window-functions,Sql,Oracle,Greatest N Per Group,Window Functions,我在一个表中有4列 公司零件号 制造商零件号 订单号 零件接收日期 前 我只想根据表中第一行的最大零件接收日期返回一条记录(零件接收日期为2015年3月31日的记录) 我试过了 RANK() OVER (PARTITION BY Company Part Number,Manufacturer Part Number ORDER BY Part Receipt Date DESC,Order Number DESC) = 1 在WHERE语句的末尾,这不

我在一个表中有4列

  • 公司零件号

  • 制造商零件号

  • 订单号

  • 零件接收日期

我只想根据表中第一行的最大零件接收日期返回一条记录(零件接收日期为2015年3月31日的记录)

我试过了

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

另外请注意,您不能有像
公司零件号
这样的列名(其中有空格)-至少不能,除非它们用双引号括起来,这是一种非常糟糕的做法,最好避免。

OP按
公司零件号
制造商零件号
进行分区,你注意到了吗?@mathguy。我认为阅读这个问题是非常清楚的:“我只想返回一条基于最大零件接收日期的记录,这将是表中的第一行”。窗口功能对于这个操作来说是多余的。所以你不会觉得OP显示了一个简化的输入,而事实上他有几个不同的公司零件号和制造商零件号,他正试图获得最近的零件交付?真的吗?@mathguy。OP可以自由评论和详细说明任何答案(或评论)。这是他/她提出的具体问题的最简单解决方案。我看没有理由使它复杂化。我当然不会假定问题中没有的东西,然后根据这个问题否决其他用户。谢谢你们的帮助。这起作用了。还有一个问题。出于报告原因,我只需从部件接收日期列中单独返回dd/mm/yyyy,忽略时间部件。你能帮我吗?谢谢你们的帮助。这起作用了。还有一个问题。出于报告原因,我只需从部件接收日期列中单独返回dd/mm/yyyy,忽略时间部件。你能帮我一下吗?@Jude92-不要在
选择
中包含
零件收据日期
,而是包含
到字符(零件收据日期,'dd/mm/yyyy')
。不过,只在最终报告中这样做,而不是任何中间结果。嘿,裘德,如果他们中的一个帮助你解决了你的问题,在这里看到一个明显的答案会很好。