Мне нужно считать пользователей из старой базы данных, чтобы использовать их для статистики в новой системе, но у меня нет исходной таблицы пользователей. Однако есть таблица статистики с суммой за каждый год, где я также могу найти всю необходимую информацию о пользователях.Вдобавок это также дает мне только активных пользователей, что мне и нужно.
В таблице есть следующие соответствующие столбцы: (столбцы статистики здесь не важны)
Я хочу, чтобы 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 для всех негруппированных строк?