有一个带有列
的表time_periodstime_period START_DATE PAY_DATE
1 01-DEC-2014 02-DEC-2014
1 12-NOV-2014 01-DEC-2014
PEOPLE_TABLE WITH COLUMNS
TIME_PERIOD EMP_NUM emp_name
1 101 xyz
我创建了一个查询:
select pt.emp_name,
max(tp.start_date),
tp.pay_date
from time_periods tp,
people_table pt
where tp.time_period=pt.time_period
group by pt.emp_name,tp.pay_date
但这是回归
emp_name START_DATE PAY_DATE
xyz 01-DEC-2014 02-DEC-2014
xyz 12-NOV-2014 01-DEC-2014
但这会返回两行....我需要的只是一行,其中max(start_date)和pay_date对应于此。那就是:
emp_name START_DATE PAY_DATE
xyz 01-DEC-2014 02-DEC-2014
答案 0 :(得分:2)
在Oracle中,您可以使用分析函数:
select emp_name, max_start_date, pay_date
from (
select pt.emp_name,
tp.start_date,
tp.pay_date,
rank() over(partition by pt.emp_name
order by tp.start_date desc) rw,
from time_periods tp, people_table pt
where tp.time_period=pt.time_period
) where rw = 1;
RANK()可能会为同一个emp_name
提供多行(如果它们都具有相同的start_date
)
如果每个emp_name