В последнее время я неоднократно сталкивался со следующим случаем, либо мне нужно применить MAX () или SUM () к одному столбцу таблицы, но мне нужны наборы значений DISTINCT для других столбцов.
Например, рассмотрим следующую таблицу и связанные столбцы, представляющие сведения о входе в систему в StackOverflow.
SoUserLogins (OpenIdToken, Name, IpAdress, LoginTimeStamp, QuestionsAsked)
Мне может понадобиться набор результатов, содержащий пользователейи их последний логин.
SELECT DISTINCT
OpenIdToken,
MAX(LoginTimeStamp)
INTO #tmpLastLogin
FROM SoUserLogins
GROUP BY OpenIdToken
Но мне нужны отличные значения от других столбцов.Я собираюсь обернуть это в общее табличное выражение (CTE), потому что я собираюсь использовать его позже и не хочу очищать другую временную таблицу.
;WITH tmpLastLogin_CTE AS (
SELECT DISTINCT
SOL.OpenIdToken, SOL.Name, SOL.IpAdress, SOL.QuestionsAsked
TTL.LastLogin
FROM SoUserLogins SOL
JOIN #tmpLastLogin TLL ON SOL.OpenIdToken = TLL.OpenIdToken
)
--Extra SQL using tmpLastLogin_CTE goes here
Вы можете изменитьот MAX (LoginTimeStamp) до SUM (QuestionsAsked) в приведенном выше коде с несколькими дополнительными настройками, чтобы увидеть похожий пример.
Мой вопрос, есть ли более чистый или более элегантный способ справиться с этими ситуациями?
Я использую SQL Server.