2011-12-21 6 views
1

Я пытаюсь объединить различные и максимум на этой таблицеSQL SELECT DISTINCT Max Issue

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 поле, так как вы не указали, какое значение вы хотите для каждая отдельная строка. Если вы, например, хотите самый высокий идентификатор, вы можете использовать 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