Sql 仅返回最新的行

Sql 仅返回最新的行,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有一个名为TRANSFER的存储事务的表。我需要编写一个查询,只返回给定股票标签的最新交易记录(这是标识物料的唯一键),因此我使用了以下查询 SELECT a.TRANSFER_ID , a.TRANSFER_DATE , a.ASSET_CATEGORY_ID , a.ASSET_ID , a.TRANSFER_FROM_ID , a.TRANSFER_TO_ID , a.STOCK_TAG FROM TRANSFER a INN

我有一个名为TRANSFER的存储事务的表。我需要编写一个查询,只返回给定股票标签的最新交易记录(这是标识物料的唯一键),因此我使用了以下查询

SELECT a.TRANSFER_ID
     , a.TRANSFER_DATE
     , a.ASSET_CATEGORY_ID
     , a.ASSET_ID
     , a.TRANSFER_FROM_ID
     , a.TRANSFER_TO_ID
     , a.STOCK_TAG
 FROM TRANSFER a
INNER JOIN (
              SELECT STOCK_TAG
                   , MAX(TRANSFER_DATE) maxDATE
                FROM TRANSFER
               GROUP BY STOCK_TAG
            ) b
   ON a.STOCK_TAG = b.STOCK_TAG AND
      a.Transfer_Date =b.maxDATE
但我以一个问题结束,当多个转账发生在同一个转账日期时,它会返回所有行,因为我只需要最新的一行。我怎样才能得到最新的一排

编辑:

transfer_id   transfer_date   asset_category_id  asset_id   stock_tag 
 1               24/12/2010      100               111         2000
 2               24/12/2011      100               111         2000

考虑在子查询中选择
MAX(TRANSFER\u ID)
,假设
TRANSFER\u ID
是一个递增字段,这样以后的传输总是比以前的传输有更大的ID。

为了避免可能出现的不按传输日期顺序插入行的情况,可能是出于性能原因,您可能想试试:

 select
   TRANSFER_ID      ,
   TRANSFER_DATE    ,
   ASSET_CATEGORY_ID,
   ASSET_ID         ,
   TRANSFER_FROM_ID ,
   TRANSFER_TO_ID   ,
   STOCK_TAG
 from (
   SELECT
     TRANSFER_ID      ,
     TRANSFER_DATE    ,
     ASSET_CATEGORY_ID,
     ASSET_ID         ,
     TRANSFER_FROM_ID ,
     TRANSFER_TO_ID   ,
     STOCK_TAG        ,
     row_number() over (
       partition by stock_tag
       order by     transfer_date desc,
                    transfer_id desc) rn
   FROM TRANSFER)
 where rn = 1

如果两次转移发生在同一日期,您希望如何确定哪一次是最新的?(如果
TRANSFER.TRANSFER\u ID
是一个递增字段,您可以在子查询中选择
MAX(TRANSFER\u ID)
,然后加入该值。)@cdhowie您好,该解决方案有效,谢谢:)酷。添加它作为一个答案。如果您曾经遇到记录未插入到转账日期顺序中的情况,那么加入max transfer\u id和transfer\u id的逻辑将失败。我自己也不会依赖它,尽管这个解决方案奏效了。还有其他方法吗?根据你的模式我看不到。考虑将<代码>传输日期> /代码>作为一个DATE时间列。那么,在寻找最新订单时,您将拥有第二精度。这将是需要考虑的问题,谢谢。