【问题标题】:Oracle:Get Most recent Transaction based on updated Date ad like column [duplicate]Oracle:根据更新的日期广告(如列)获取最新交易[重复]
【发布时间】:2021-03-30 16:40:41
【问题描述】:

您好,我正在尝试根据更新的时间戳以及另一列获取最近的交易,就像我尝试使用以下查询但没有工作一样。

Create Table Transactions(Transaction_Id number,User_ID varchar(20),Transaction_Name varchar(20),Upd_Dt Date);

Insert into Transactions(Transaction_Id,User_ID,Transaction_Name,Upd_Dt)values(123,'User1','FROM_CUSTOME_ON_0107',to_date('11/26/2013','mm/dd/yyyy'));
Insert into Transactions(Transaction_Id,User_ID,Transaction_Name,Upd_Dt)values(124,'User1','FROM_CUSTOME_ON_0207',to_date('12/26/2013','mm/dd/yyyy'));
Insert into Transactions(Transaction_Id,User_ID,Transaction_Name,Upd_Dt)values(125,'User1','FROM_CUSTOME_ON_0207',to_date('01/26/2013','mm/dd/yyyy'));

Insert into Transactions(Transaction_Id,User_ID,Transaction_Name,Upd_Dt)values(126,'User1','FROM_CUSTOME_ON',to_date('02/26/2013','mm/dd/yyyy'));
Insert into Transactions(Transaction_Id,User_ID,Transaction_Name,Upd_Dt)values(127,'User1','FROM_CUSTOME_ON',to_date('03/26/2013','mm/dd/yyyy'));
Insert into Transactions(Transaction_Id,User_ID,Transaction_Name,Upd_Dt)values(128,'User1','FROM_CUSTOME_ON',to_date('04/26/2013','mm/dd/yyyy'));

尝试查询:

Select tl1.Transaction_Id from Transactions tl1 
where tl1.Upd_Dt = (Select max(tl2.Upd_Dt) from Transactions tl2) and tl1.Transaction_Name 
like 'FROM_CUSTOME_ON_%';

如何获得 LIKE 'FROM_CUSTOME_ON_MMYY' 的准确记录?

【问题讨论】:

  • 所有Upd_Dt 的值都是相等的,并且它们没有任何时间部分,您可以修复示例数据吗?

标签: sql oracle sql-limit


【解决方案1】:

您需要DENSE_RANK() 分析函数,如果存在多个Upd_Dt 列的值,则通过该函数获取所有绑定记录

使用以下查询之一

对于Oracle11g:

SELECT Transaction_Id
  FROM
  (
   SELECT Transaction_Id, DENSE_RANK() OVER (ORDER BY Upd_Dt DESC) AS dr
     FROM Transactions tl1
    WHERE Transaction_Name like 'FROM_CUSTOME_ON_%'
   )
 WHERE dr = 1

对于Oracle12c:

SELECT Transaction_Id
  FROM Transactions tl1
 WHERE Transaction_Name like 'FROM_CUSTOME_ON_%'
 ORDER BY DENSE_RANK() OVER (ORDER BY Upd_Dt DESC) 
 FETCH NEXT 1 ROW WITH TIES    

但是,在当前情况下,所有日期值都相等,并且所有记录都返回为最近的,这似乎没有任何意义。至少,您可以为日期值添加时间部分,您似乎是指提到timestamp。

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2014-07-14
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多