我有这张桌子:
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)
使用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)