Как получить строку SQL по максимуму одного столбца, сгруппировать по другому столбцу

Мне нужно считать пользователей из старой базы данных, чтобы использовать их для статистики в новой системе, но у меня нет исходной таблицы пользователей. Однако есть таблица статистики с суммой за каждый год, где я также могу найти всю необходимую информацию о пользователях.Вдобавок это также дает мне только активных пользователей, что мне и нужно.

В таблице есть следующие соответствующие столбцы: (столбцы статистики здесь не важны)

  • UserID
  • FirstName
  • LastName
  • Email
  • Year

Я хочу, чтобы UserID был отдельным, так что это единственный столбец, который у меня может быть в GROUP BY. Я буду запускать MAX для года, чтобы получить значения за последний год. FirstName, LastName и Email должны совпадать с строкой MAX (Год). Другими словами, люди могли менять и имена, и адреса электронной почты в течение многих лет, и мне нужно только последнее, так как оно единственное, что имеет значение.

Мое лучшее предложение для SQL-запроса звучит так:

SELECT UserID, Firstname, LastName, Email, MAX(Year) AS Year
FROM myTable
GROUP BY UserID
ORDER BY LastName, FirstName

Единственная проблема заключается в том, что SQL Server 2008 не позволяет мне делать что-либо подобное, потому что все столбцы либо должны иметь функцию, например MAX, либо часть ГРУППА ПО. Столбцы FirstName, LastName и Email не могут находиться в GROUP BY, потому что это приведет к слишком большому количеству записей. Кажется, что-то работает, чтобы поставить MAX на все из них, но тогда я не могу знать, над каким столбцом на самом деле работает функция MAX. Я не знаю наверняка, что это будет проблемой, но у меня нет времени просматривать 100 000 строк, чтобы увидеть, действительно ли это проблема.

Короче говоря, мне нужна целая строка из пяти столбцов, где MAX работает только с одним столбцом, а GROUP BY - с другим. Есть ли у кого-нибудь хорошее решение или действительно ли безопасно использовать MAX для всех негруппированных строк?

6
задан ypercubeᵀᴹ 19 January 2012 в 14:44
поделиться