Oracle分区使用2列

时间:2017-06-05 00:40:40

标签: sql oracle

我有一张如下表所示的表

Id RC_CLASS  RC_DATE    RC_TYPE
14 FI-321619 22-Jan-16   S
14 FI-399481 29-Jan-16   D
14 FI-321619 20-Jan-17   S

这是我试过的

SELECT *
FROM (SELECT rc.*,
             RANK() OVER (PARTITION BY ID,RC_CLASS order by rc__date) AS LATEST_VERSION
      FROM table
     )
WHERE LATEST_VERSION = 1 
ORDER BY rc_vendorid;

预期输出

Id RC_CLASS  RC_DATE    RC_TYPE
14 FI-399481 29-Jan-16   D
14 FI-321619 20-Jan-17   S

我想通过ID和Class进行分组,并在RC_DATE之前进行排序。我得到的总是最基于日期的,分区不起作用。缺少什么?

1 个答案:

答案 0 :(得分:3)

我认为你很亲密。基本上,您只需要降序排序即可获得最新版本:

SELECT rc.*
FROM (SELECT rc.*,
             RANK() OVER (PARTITION BY ID, RC_CLASS ORDER BY rc_date DESC) AS LATEST_VERSION
      FROM table rc
     ) rc
WHERE LATEST_VERSION = 1
ORDER BY rc_vendorid;

我注意到您使用RANK()。如果您在同一天有两行,则可以返回重复项。如果这不合适,可以使用ROW_NUMBER()任意选择一个(如果所有其他键都相同)。