2011-12-21 57 views
1

我嘗試不同的,最大結合在這個表上SQL選擇不同的最大問題

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 

什麼是正確的方法?

回答

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