使用SQL拉取前一条记录

zpgglvta  于 2022-10-04  发布在  Oracle
关注(0)|答案(1)|浏览(225)

我在Oracle数据库中有一些事务数据。在该表中,相同的id_num可以与在不同日期/时间出现的多个对象相关联。我正在尝试使用包含每个id_num的最新记录以及以前的对象值的SQL将结果组合在一起。此屏幕截图显示了数据的示例以及所需的结果。我对数据进行了颜色编码,以说明应该从数据中的哪些行提取结果。

我写了以下代码,它为我获得了每个id_num的最新记录,但我正在努力解决如何引入precient_Object的问题。非常感谢任何人能提供的任何帮助。

SELECT * FROM 

(
SELECT
  id_num,
  date_time,
  object, 
  RANK() OVER (PARTITION BY id_num ORDER BY date_time DESC) RANK_NUM

FROM TableX

  ) x 

WHERE RANK_NUM = 1
oxcyiej7

oxcyiej71#

select   id_num
        ,object
        ,date_time
        ,previous_object
from     (
         select   id_num
                 ,object
                 ,max(date_time)                                                      as date_time
                 ,lag(object) over(order by max(date_time))                           as previous_object
                 ,row_number() over(partition by id_num order by max(date_time) desc) as rn
         from     t
         group by id_num, object
         ) t
where    rn = 1

ID_NUM|Object|Date_Time|Precision_Object
-|-|
1X|C|27-07-22 14.43.00.000000|B
2X|G|08.22 15.36.00.000000|F

Fiddle

相关问题