我的数据集如下:
EMP_NAME MGRNAME STATUS MODIFIED_DATE
---------------------------------------------------
Amy John ACTIVE 01/15/2012 00:00:00
Amy Ken INSERVICE 06/08/2000 00:00:00
Amy Tom INACTIVE 04/02/2010 00:00:00
Ron David ACTIVE 01/15/2008 00:00:00
Keith Jack INACTIVE 08/10/2005 00:00:00
Keith Cat INACTIVE 04/30/2008 00:00:00
Keith Ken INACTIVE 02/04/2010 00:00:00
Mary Stephen INACTIVE 10/18/2010 00:00:00
现在,我应该根据以下条件识别重复的行:
ACTIVE
,那么我们应该
不要考虑相同。获取该Emp的状态为<>
ACTIVE
的记录。例如: - 对于艾米,我们应该排除记录
ACTIVE
状态。我们应该使用INSERVICE
和。来获取记录
INACTIVE
MODIFIED_DATE
)记录并获取剩余记录
例如: - 对于Keith,由于Mgr记录状态为非活动状态,因此获取MODIFIED_DATE
和08/10/2005 00:00:00
04/30/2008 00:00:00
)记录
最终输出应如下所示:
EMP_NAME MGRNAME STATUS MODIFIED_DATE
------------------------------------------------------
Amy Ken INSERVICE 06/08/2000 00:00:00
Amy Tom INACTIVE 04/02/2010 00:00:00
Keith Jack INACTIVE 08/10/2005 00:00:00
Keith Cat INACTIVE 04/30/2008 00:00:00
答案 0 :(得分:0)
试试这个:
SELECT EMP_NAME , MGRNAME , STATUS , MODIFIED_DATE
FROM (
SELECT your_table.*,
rank() over (partition BY EMP_NAME ORDER BY decode(STATUS,'ACTIVE', to_date('31129999', 'ddmmyyyy'), MODIFIED_DATE) DESC ) r FROM your_table
) t
WHERE r > 1
Here是一个小提琴