在不更改ROWNUM的情况下检索最近输入的文本的最准确/最有效的方法是什么?

时间:2016-01-14 13:27:37

标签: sql oracle greatest-n-per-group rownum

请耐心等待我,因为我对这一切都是新手。我得到了一个以前的查询的答案,这是非常有帮助的。 现在我正在尝试完成项目的另一个步骤。

我的查询是,我有一张桌子,我正在尝试检索针对订单的特定行输入的最新笔记。 表格的示例如下所示。

下表中的数据是通过连接两个单独的表格获得的。

我使用了以下语法,并且能够获取针对示例订单输入的最新注释(867318) 但是现在,在订单有多行(ORDER_LINE)的情况下,如何检索针对ORDER_LINE输入的最新NOTE_PAD.TEXT?

非常感谢任何帮助。

SQL品牌: Oracle数据库12c之前日期格式:是实时日期/时间问题:最准确/有效的方法来检索最近输入的NOTE_PAD.TEXT,而不是每次更改ROWNUM,具体取决于ORDER_NUMBER

SQL语法:

 SELECT *
  FROM ( SELECT ORDER_TYPE,
                ORDER_NUMBER,
                ORDER_LINE,
                NOTE_PAD.CREATED_DATE,
                NOTE_PAD.TEXT
                           FROM ORDER_AWB INNER JOIN NOTE_PAD ON ( "ORDER_AWB"."NOTES" = "NOTE_PAD"."NOTES" )
          WHERE ( "ORDER_AWB"."ORDER_NUMBER" = '867318' )
          ORDER BY NOTE_PAD.CREATED_DATE DESC )
WHERE ROWNUM <= 1

< strong>使用上述语法时表结果的示例: enter image description here

2http://i.stack.imgur.com/e02YS.png所以基本上这就是整个代码在数据库中的样子:
我需要根据特定类型的订单检索笔记它的地位。
因此
ORDER_TYPE ='RO'
ORDER_STATUS ='OPEN'
code

1 个答案:

答案 0 :(得分:0)

如果您想同时处理多个订单,请使用row_number()

SELECT *
FROM (SELECT ORDER_TYPE, np, ORDER_LINE,
             np.CREATED_DATE, NOTE_PAD.TEXT,
             ROW_NUMBER() OVER (PARTITION BY o.ORDER_NUMBER
                                ORDER BY NP.CREATED_DATE DESC
                               ) as seqnum
      FROM ORDER_AWB o INNER JOIN
           NOTE_PAD np
           ON o."NOTES" = np."NOTES" 
     ) o
WHERE SEQNUM = 1;