[英]Query to fetch row corresponding to Max value in SQL
有一個帶有列的表time_periods
time_period START_DATE PAY_DATE
1 01-DEC-2014 02-DEC-2014
1 12-NOV-2014 01-DEC-2014
PEOPLE_TABLE和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
在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
只需要一行,則可以使用ROW_NUMBER()代替RANK()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.