SQL选择不同的最大问题

时间:2011-12-21 12:40:31

标签: mysql sql distinct max

我正在尝试在此表中组合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

什么是正确的方式?

2 个答案:

答案 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