簡體   English   中英

查詢以獲取與SQL中的最大值對應的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM