我有一张如下表所示的表
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之前进行排序。我得到的总是最基于日期的,分区不起作用。缺少什么?
答案 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()
任意选择一个(如果所有其他键都相同)。