Причина, по которой вы получаете результаты, кроется в том, как структурировано ваше предложение GROUP BY
.
Когда вы используете какую-либо статистическую функцию, MAX(X)
, SUM(X)
, COUNT(X)
, или что у вас есть, вы сообщаете механизму SQL, что вам нужно совокупное значение столбца X для каждой уникальной комбинации столбцов, перечисленных в предложении GROUP BY
.
В вашем запросекак написано, вы группируете по всем трем столбцам таблицы, сообщая механизму SQL, что каждый кортеж уникален.Поэтому запрос возвращает ВСЕ значения, а вы вообще ничего не получаете MAX
.
То, что вы действительно хотите в своих результатах, - это максимальный RegID для каждого отдельного значения в Name
столбец, а также Team
, который сочетается с этой (RegID
, Name
) комбинацией.
Для этого вам нужно найти MAX(ID)
для каждого Name
в исходном наборе данных, а затем использовать этот список из RegID
s, чтобы добавить значения для Name
и Team
во вторичном наборе данных.
Предостережение (по комментариям @HABO): Предполагается, что RegID является уникальным числом (столбец IDENTITY
, значение из SEQUENCE
или что-тотакого рода).Если есть повторяющиеся значения, это не удастся.
Самый простой способ сделать это с помощью подзапроса.Подзапрос ниже получает ваши уникальные RegID
s, а затем присоединяется к исходной таблице, чтобы добавить другие значения.
SELECT
f.RegID
,f.Name
,f.Team
FROM
Football AS f
JOIN
(--The sub-query, sq, gets the list of IDs
SELECT
MAX(f2.RegID) AS Max_RegID
FROM
Football AS f2
GROUP BY
f2.Name
) AS sq
ON
sq.Max_RegID = f.RegID;
EDIT: Извините.Я просто перечитал вопрос.Чтобы получить только одну запись для MAX(RegID)
, просто выньте GROUP BY
из подзапроса, и вы просто получите текущее максимальное значение, которое вы можете использовать, чтобы найти значения в остальных столбцах.
SELECT
f.RegID
,f.Name
,f.Team
FROM
Football AS f
JOIN
(--The sub-query, sq, now gets the MAX ID
SELECT
MAX(f2.RegID) AS Max_RegID
FROM
Football AS f2
) AS sq
ON
sq.Max_RegID = f.RegID;