选择一个不同的行

San*_*eep 2 mysql greatest-n-per-group

我有一个 MySQL 表:

o_id | Salesperson |   fax   | Pincode  
1      Sandy         2110271   12011
2      Sandy         2452356   24523
3      Ricky         1023564   45510
Run Code Online (Sandbox Code Playgroud)

我需要得到以下结果:

Salesperson |   fax   | Pincode  
Sandy         2452356   24523
Ricky         1023564   45510
Run Code Online (Sandbox Code Playgroud)

(注意:我不需要显示 o_id 列)

我试过了:

select distinct salesperson,faxno,pin 
from OPPORTUNITY
Run Code Online (Sandbox Code Playgroud)

和:

select salesperson,faxno,pincode 
from OPPORTUNITY 
Group By (salesperson)
Run Code Online (Sandbox Code Playgroud)

...但我仍然得到:

select distinct salesperson,faxno,pin 
from OPPORTUNITY
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多网络上的场景,但仍然无法达到预期的结果。

是否有任何属性或函数会给出“桑迪” - 其o_id最大值。

例子:

Select distinct sales, faxno, pincode 
from opportunity where o_id= max(o_id)
Run Code Online (Sandbox Code Playgroud)

虽然上面的代码不起作用,但类似的东西可以帮助吗?

Len*_*art 7

该行:

Sandy         2452356   24523
Run Code Online (Sandbox Code Playgroud)

是首选,因为它具有最大的o_id. 您可以o_id通过以下方式选择最大的每个销售人员:

select max(o_id), salesperson
from T 
group by salesperson
Run Code Online (Sandbox Code Playgroud)

SQL 的一个重要特性是它是封闭的,即查询的结果是一个关系(表)。所以我们可以简单地将它与原始表连接起来:

select x.o_id, x.Salesperson, x.fax, x.Pincode
from T as x
join (
    select max(o_id) as o_id, salesperson
    from T
    group by salesperson
) as y
    on x.o_id = y.o_id
   and x.salesperson = y.salesperson
Run Code Online (Sandbox Code Playgroud)

即使 question 没有明确说明,也有理由相信它salesperson在功能上依赖于o_id。如果是这种情况,o_id单独加入就足够了:

select x.o_id, x.Salesperson, x.fax, x.Pincode
from T as x
join (
    select max(o_id) as o_id, salesperson
    from T
    group by salesperson
) as y
    on x.o_id = y.o_id
Run Code Online (Sandbox Code Playgroud)

在 SQL2003 中,引入了窗口函数。它们非常适合这种查询。我听说下一个版本的 MySQL 将支持它们,但我猜你没有使用它。

您还提到了这种结构:

select salesperson,faxno,pincode 
from OPPORTUNITY 
Group By salesperson
Run Code Online (Sandbox Code Playgroud)

引起最多混乱的可能是 MySQL 中的构造。它在大多数(所有?)其他产品中无效,因为结果是不确定的或随机的。发生的情况是 MySQL 随机faxno, pincode为每个salesperson.