2017-09-25 81 views
0

我有下面的表,並試圖運行以下查詢以獲得最新的DEPTID根據EFFDT,這是第二行的 (DAA System Infrastructur 1/13/2017),但我仍然得到所有的記錄。我在這裏做錯了什麼?Oracle - Sql查詢獲取表中的最新記錄

我確實看過類似的問題,但沒有像我一樣的問題。

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

可以顛倒順序,並採取先用'LIMIT 1' – SubjectDelta

+1

'descr'不應該的一部分鏤空表/內聯視圖,也不屬於組的一部分。 – xQbert

回答

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' 
0
select * from(
    select * 
    from SYSADM.PS_DEPT_TBL 
    order by to_CHAR(EFFDT,'YYYY-MM-DD') desc 
) 
where ROWNUM <2; 

上面的查詢將返回其擁有最新的日期值的行。

+0

你試過這個嗎? –

+0

這並不能真正解決OP的問題:他們需要給定部門的最大日期。 – APC

+0

到JAX,並且需要在查詢中使用desc而不是asc。 –

0

試試這個

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

爲什麼古怪的非Oracle語法? – APC

+0

因爲我從沒有看到甲骨文的年齡...我的錯誤是什麼? – SubjectDelta

+1

文字使用單引號而不是雙引號。標識符不使用反引號。 – APC