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)
虽然上面的代码不起作用,但类似的东西可以帮助吗?
该行:
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
.
归档时间: |
|
查看次数: |
1260 次 |
最近记录: |