Дополнительный столбец T-SQL в GROUP BY. Как включить в результаты, но исключить из группировки - PullRequest
1 голос
/ 22 ноября 2010

У меня есть следующий SQL

SELECT     CNumber, MAX(FormSubmitted), Score
FROM         dbo.vw_MSA
WHERE     (Score IS NOT NULL)
GROUP BY CNumber, Score

Результаты:

CNumber FormSubmitted                   Score
0011509 2010-09-13 10:22:46.763         11
0016239 2010-09-28 13:53:58.557         8*
0016239 2010-10-12 11:52:33.150         12
0018792 2010-11-02 13:17:37.437         3
0051089 2010-10-07 11:38:29.257         13
0051091 2010-10-01 12:01:30.450         0
0067987 2010-09-29 11:06:48.490         7
0079351 2010-09-30 09:49:10.747         34
0833933 2010-09-30 12:54:19.013         6
0848185 2010-10-07 12:08:42.087         6
5010590 2010-11-01 09:54:14.790         6*
5010590 2010-11-16 15:23:50.350         12

Я уверен, что смогу легко разобраться, но по какой-то причине я борюсь с этим. Мне нужно, чтобы Score был включен в результаты, но наличие этого в GROUP BY неизбежно возвращает больше, чем просто запись с последней датой отправки формы. Может ли кто-нибудь помочь мне обновить этот запрос, чтобы я получал балл в результатах, но только те записи, которые являются максимальной датой отправки формы, т.е. исключают помеченные *?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Предполагая, что (CNumber, FormSubmitted) гарантированно будет уникальным:

SELECT T1.CNumber, T1.FormSubmitted, T1.Score
FROM dbo.vw_MSA T1
JOIN
(
    SELECT CNumber, MAX(FormSubmitted) AS MaxFormSubmitted
    FROM dbo.vw_MSA
    WHERE Score IS NOT NULL
    GROUP BY CNumber
) T2
ON T1.CNumber = T2.CNumber
AND T1.CNumber = T2.MaxFormSubmitted
1 голос
/ 22 ноября 2010
SELECT     A.CNumber, A.FormSubmitted, A.Score
FROM         dbo.vw_MSA A
INNER JOIN 
(SELECT CNumber, MAX(FormSubmitted) AS MaxSubmitted 
FROM dbo.vw_MSA
WHERE     (Score IS NOT NULL)
GROUP BY CNumber) AS B
ON A.CNumber = B.CNumber AND A.FormSubmitted = B.MaxSubmitted
...