SQL выбирает различную максимальную проблему - PullRequest
1 голос
/ 21 декабря 2011

Я пытаюсь объединить разные и максимальные значения в этой таблице

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 ]

3 голосов
/ 21 декабря 2011

Вы используете 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 голос
/ 21 декабря 2011
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
...