SQL为重复记录找到最高值

时间:2017-01-13 15:57:22

标签: sql greatest-n-per-group

我有这样的场景。

ID| NAME|   EMAIL
---|------|--------------|---
11| ROCKY|  ROCKY@XYZ.COM
99| JAMES|  JAMES@XYZ.COM
88| ROCKY|  ROCKY@XYZ.COM
77| JAMES|  JAMES@XYZ.COM

我的预期结果是

ID   NAME   EMAIL
99   ROCKY  ROCKY@XYZ.COM
88   JAMES  JAMES@XYZ.COM

请帮忙

4 个答案:

答案 0 :(得分:2)

我认为您的预期结果有拼写错误。但我认为你想要的只是一个简单的group by

select name, email, max(id)
from yourtable
group by name, email

答案 1 :(得分:1)

假设您正在使用MSSQL,并且您的预期结果与您发布的结果完全相反,那么您将要使用GROUP BY子句:

SELECT MAX(ID), NAME, EMAIL FROM YourTable GROUP BY NAME, EMAIL

答案 2 :(得分:0)

由于你没有提供你的SQL语句,我只能猜到你想要做什么。

你试过吗?

ORDER BY ID desc

答案 3 :(得分:0)

Codeulike将是我的首选+1

但另一个选项是使用WITH TIES子句

Declare @YourTable table (ID int,NAME varchar(50),EMAIL varchar(50))
Insert Into @YourTable values
(11,'ROCKY','ROCKY@XYZ.COM'),
(99,'JAMES','JAMES@XYZ.COM'),
(88,'ROCKY','ROCKY@XYZ.COM'),
(77,'JAMES','JAMES@XYZ.COM')

Select Top 1 with Ties *
 From  @YourTable
 Order By Row_Number() over (Partition By Name,EMail Order by ID Desc)

返回

ID  NAME    EMAIL
99  JAMES   JAMES@XYZ.COM
88  ROCKY   ROCKY@XYZ.COM