2010-11-18 5 views
1

Мне нужно использовать функцию MAX в моем предложении where, потому что это дает мне неправильные данные, если я этого не делаю. Вот мой код:SQL MAX date in where clause

(SELECT 
Index, 
Company, 
FormType, 
MAX(DocumentDate) AS DocumentDate 
FROM dbo.FormInstance AS F 
WHERE f.company = 1234 
AND (
    CAST(FLOOR(CAST([DocumentDate] AS FLOAT))AS DATETIME) 
    BETWEEN CAST(FLOOR(CAST(@StartDate AS FLOAT))AS DATETIME) 
     AND CAST(FLOOR(CAST(@EndDate AS FLOAT))AS DATETIME) 
    ) 
GROUP BY 
Company, 
Index, 
FormType); 

Как бы я сделать, это сказать и MAX (DocumentDate) находится между @start и @end?

Благодаря

ответ

10

HAVING MAX(DocumentDate) BETWEEN @Start AND @End Добавить после GROUP BY заявление. HAVING по существу является предложением WHERE агрегации.

+1

Должен ли я помещать DocumentDate где-нибудь в свой оператор select? Я получаю эту ошибку. Столбец «dbo.FormInstance.DocumentDate» недопустим в предложении HAVING, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. – user380432

+2

Вы случайно не оставили его в MAX()? –

+0

nevermind, мой плохой я забыл MAX в наличии cluase Спасибо !!!! – user380432