我正在尝试在此表中组合distinct和max
id name surname group year
113865 JOHN RED 29 2012
112756 ANNE REDS 128 2011
111960 MATT RED 88 2011
108615 JOHN RED 29 2011
102801 JOHN REDMOND 29 2010
98152 CARL RED 36 2009
98175 MANUEL RED 36 2009
96569 JOHN RED 31 2009
95684 CARL RED 36 2008
95685 MANUEL RED 36 2008
我想过滤具有最高年份的同一组中的不同名称,姓氏
id name surname group year
113865 JOHN RED 29 2012
112756 ANNE REDS 128 2011
111960 MATT RED 88 2011
102801 JOHN REDMOND 29 2010
98152 CARL RED 36 2009
98175 MANUEL RED 36 2009
96569 JOHN RED 31 2009
什么是正确的方式?
答案 0 :(得分:3)
您使用group by
而不是distinct
:
select name, surname, group, max(year)
from TheTable
group by name, surname, group
结果:
name surname group year
JOHN RED 29 2012
ANNE REDS 128 2011
MATT RED 88 2011
JOHN REDMOND 29 2010
CARL RED 36 2009
MANUEL RED 36 2009
JOHN RED 31 2009
我没有包含id
字段,因为您没有为每个不同的行指定所需的值。例如,如果您想要最高ID,则可以使用max(id)
将其包含在结果中。
你可以在列表中包含id
字段,MySQL会将其包含在结果中,但该字段的结果是不可预测的。其他一些数据库(如MS SQL Server)不允许您将其包含在结果中,而不使用像max
这样的聚合。
答案 1 :(得分:1)
select t1.id, t2.name, t2.surname, t2.year, t2.group
from
(select group, name, surname, MAX(Year) as year
from table
group by group, name, surname) t2
INNER JOIN table t1 ON t1.name = t2.name
and t1.surname = t2.surname
and t1.year = t2.year
and t1.group = t2.group