Oracle SQL:使用多个条件只获取一个最大行

jll*_*ino 6 sql oracle select

我有这张桌子:

Department   NAME   EMAIL         ID     DATE1         DATE2
1            John   asd@asd.com   74     05/04/2007    05/04/2007
1            Sam    asd@asd.com   23     05/04/2007    05/04/2007
1            Tom    asd@asd.com   46     05/04/2007    03/04/2007
1            Bob    bob@asd.com   23     01/01/2006
2            Tom    asd@asd.com   62     02/02/2000    05/05/1997
Run Code Online (Sandbox Code Playgroud)

我想获得最大的行(每个部门只有一个)DATE1,但它不是唯一的!因此,如果有多个结果我想获得最大值DATE2,如果有多个结果,则返回具有最大ID的那个.

所以查询的结果将是:

1            John   asd@asd.com   74     05/04/2007    05/04/2007
2            Tom    asd@asd.com   62     02/02/2000    05/05/1997
Run Code Online (Sandbox Code Playgroud)

非常感谢你.

Bas*_*nni 18

您需要使用ROW_NUMBER函数:

SELECT Department, NAME, EMAIL, ID, DATE1, DATE2
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY Department ORDER BY DATE1 DESC, DATE2 DESC, ID DESC) AS RowNumber, 
       Department, NAME, EMAIL, ID, DATE1, DATE2
FROM MyTable ) t
WHERE RowNumber = 1
Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 5

使用over条款:

select
    *
from
    (
    select
        Department,
        Name,
        Email,
        ID,
        DATE1,
        DATE2,
        max(DATE1) over (partition by Department) as MaxDate1,
        max(DATE2) over (partition by Department, DATE1) as MaxDate2,
        max(ID) over (partition by Department, DATE1, DATE2) as MaxID
    from
        employees
    ) x
where
    x.DATE1 = x.MaxDate1
    and x.DATE2 = x.MaxDate2
    and x.ID = x.MaxID
Run Code Online (Sandbox Code Playgroud)