在另一列中使用 group by max() 两次

use group by max() twice in another column

我使用mysql查询。

我想知道最高工资的日期和金额。

我想知道我是否可以使用 max() 两次,如下所示。

结果如我所愿

但据我所知,你必须只使用一个 max()。

我错了吗?

http://sqlfiddle.com/#!9/8db0c17/4

create table test ( mid bigint , sal bigint ,  dt date);
insert into test values( 1, 100, '2020-01-01 00:00:00'), 
( 1, 200, '2020-02-01 00:00:00'), 
( 2, 100, '2020-03-01 00:00:00'), 
( 2, 200, '2020-04-01 00:00:00'),
( 2, 300, '2020-05-01 00:00:00'),
( 3, 500, '2020-10-01 00:00:00');

select mid, max(sal), max(dt) from test group by mid;
mid max(sal)    max(dt)
1   200         2020-02-01
2   300         2020-05-01
3   500         2020-10-01

是的,你可以多次使用 max 它应该是不同的列名

另一列应该在group by

您可以在查询中多次使用 max,但在您的情况下,您不会得到想要的结果。

如果我们这样更改您的数据:

1, 100, 2020-01-01
1, 200, 2020-02-01
2, 100, 2020-02-01
2, 300, 2020-03-01
2, 200, 2020-04-01
2, 300, 2020-05-01
3, 500, 2020-10-01
3, 300, 2020-11-01

您的结果将是:

1, 200, 2020-02-01
2, 300, 2020-05-01
3, 500, 2020-11-01

如您所见,对于第 3 行,我们分别获得了 saldt 的最大值。

我们可以使用类似这样的东西来获得正确的结果:

select 
 t.mid, max(t.dt), tmp.sal_max 
from test t
 join (
  select t1.mid, max(t1.sal) as sal_max
  from test t1
  group by t1.mid) tmp on tmp.mid = t.mid AND tmp.sal_max = t.sal
group by tmp.mid;

结果:

1, 2020-02-01, 200
2, 2020-05-01, 300
3, 2020-10-01, 500

我认为这不是最简单的选择,但它会起作用。