[英]Sql query with aggregate and distinct
查詢的目的:雇員有幾個職位,每個職位都列在數據庫中。 但是,查詢應僅返回每個職位級別具有最新effect_date的職位。
例如:
Employee Position Position_Level Effect_Date Process_Level
_____________________________________________________________
1 , POS1 , 1 , 01/01/2000 ,ABC
1 , POS1 , 1 , 01/01/2002 , ABC
1 , POS1 , 1 , 01/01/2003 , ABC
1 , ABCD , 1 , 01/01/2004 , ABC
1 , POS1 , 1 , 01/01/2005 , ABC
1 , POS2 , 2 , 01/01/2000 , DEF
1 , POS2 , 2 , 01/01/2002 , DEF
1 , IRHT , 2 , 01/01/2003 , DEF
1 , POS2 , 2 , 01/01/2004 , DEF
查詢應返回:
Employee Position Position_Level Effect_Date Process_Level
1 , POS1 , 1 , 01/01/2005 , ABC
1 , POS2 , 2 , 01/01/2004 , DEF
是否可以在一個查詢中實現? 由於我只需要不超過Position_Level = 3的記錄,因此我也可以執行3個單獨的查詢,但是我很難為每個位置級別獲取1個不同的記錄。
我有這個查詢,我以此為起點,但是顯然沒有得到我需要的結果。 有什么建議么?
select A.*, B.pos_level,B.employee from (select position,max(effect_date)EFFECT_DATE
from paemppos
group by position) A
JOIN paemppos B
on A.POSITION=B.POSITION
通常,最有效的方法是使用適當的索引not exists
:
select p.*
from paemppos p
where not exists (select 1
from paemppos p2
where p2.employee = p.employee and
p2.position = p.position and
p2.effect_date > p.effect_date
);
最好的索引是在paemppos(employee, position, effect_date)
。
該查詢的意思是:“從paemppos
中獲取所有行,其中該行上的雇員/職位在數據中沒有更大的effect_date
。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.