Oracle - Sql查询获取表中的最新记录

时间:2017-09-25 16:29:55

标签: sql oracle plsql

我有下表并尝试运行以下查询以根据EFFDT获取最新的DEPTID 第二排(DAA System Infrastructur 1/13/2017),但我仍然获得所有记录。我在这里做错了什么?

我确实看过类似的问题,但没有和我一样的问题。

select  d.deptid,d.descr,d.effdt
 from SYSADM.PS_DEPT_TBL d
 inner join( select deptid,descr,max(to_date(effdt)) as max_date 
              from SYSADM.PS_DEPT_TBL 
              group by deptid, descr) d1
 on d.deptid = d1.deptid  
 and to_date(effdt) = max_date
where d.deptid ='DAA'

这是表格:

DEPTID   DESCR                 EFFDT
-------------------------------------------
DAA      Telecommunications        2/18/2013
DAA      System Infrastructure         1/13/2017
DAA      Manager, Telecommunications    1/1/1900
DAA      System Infrastructure & Contrl 7/8/2013

2 个答案:

答案 0 :(得分:2)

这是你的问题:

group by deptid, descr

您的子查询在投影和分组中包含descr,因此它将计算这两列的每个组合的最大生效日期。因此,它会返回四行,其中包含四个不同的max_date值,这就是为什么您的最终结果就是它的原因。

解决方案很简单:

select  d.deptid,d.descr,d.effdt
 from SYSADM.PS_DEPT_TBL d
 inner join( select deptid,max(to_date(effdt)) as max_date 
              from SYSADM.PS_DEPT_TBL 
              group by deptid) d1
 on d.deptid = d1.deptid  
 and to_date(effdt) = max_date
where d.deptid ='DAA'

答案 1 :(得分:-1)

试试这个

SELECT * FROM (
    SELECT deptid, descr, effdt
    FROM SYSADM.PS_DEPT_TBL
    WHERE deptid = 'DAA'
    ORDER BY effdt DESC
) resultSet
WHERE ROWNUM = 1;