2010-11-18 5 views
1

Je dois utiliser la fonction MAX dans ma clause where car elle me donne les mauvaises données si ce n'est pas le cas. Voici mon code:SQL MAX date dans 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); 

Comment pourrais-je faire est de dire ET MAX (DocumentDate) est ENTRE @Start et @End?

Merci

Répondre

10

Ajouter HAVING MAX(DocumentDate) BETWEEN @Start AND @End après votre GROUP BY. HAVING est essentiellement la clause d'agrégation WHERE.

+1

Dois-je placer DocumentDate quelque part dans mon instruction select? Je reçois cette erreur. La colonne 'dbo.FormInstance.DocumentDate' n'est pas valide dans la clause HAVING car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY. – user380432

+2

Avez-vous oublié par inadvertance la partie MAX()? –

+0

ne vous méfiez pas, mon mauvais j'ai oublié le MAX dans le avoir Merci! – user380432