ORACLE中的SQL查询 - 选择最近的日期

时间:2014-03-31 20:10:03

标签: sql oracle oracle-sqldeveloper analytic-functions

我是SQL查询领域的新手。 我需要消除重复的Staff#并仅检索突出显示的行。 任何帮助都非常感谢。

Staff#      Pay_DT      Due_DT      loan_flag   housing 
------------------------------------------------------------------------
123-45-6789     14-Feb-14   3-Jan-14    Y       null 
123-45-6789     14-Feb-14   3-Jan-14    Y       Annual 
123-45-6789     14-Feb-14   13-Jan-14   Y       null 
**123-45-6789   14-Feb-14   13-Jan-14   Y       Annual** 
123-45-6789     null        null        Y       null 
123-45-6789     null        null        Y       Annual

1 个答案:

答案 0 :(得分:0)

也许你想要

SELECT *
  FROM (SELECT a.*,
               rank() over (partition by staff# order by pay_dt desc) rnk
          FROM table_name a
         WHERE housing = 'Annual')
 WHERE rnk = 1

可替换地

SELECT *
  FROM (SELECT a.*,
               max(pay_dt) over (partition by staff#) max_pay_dt
          FROM table_name a
         WHERE housing = 'Annual')
 WHERE pay_dt = max_pay_dt

如果您可以拥有关联(两行具有相同的pay_dt,其中housing列的值Annual的值为Staff#,则这两个查询将返回具有该条件的所有行。如果你想任意打破领带,你可以使用row_number而不是rank。否则,你需要告诉我们你的逻辑是什么&#39 ; d想用来打破关系。