我有下表并尝试运行以下查询以根据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
答案 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;