2010-11-18 163 views
1

我需要在我的where子句中使用MAX函数,因为如果我不这样做,它会给我错误的数据。这里是我的代码:SQL MAX日期在哪里条款

(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)是BETWEEN @Start和@End吗?

感谢

回答

10

您GROUP BY语句后添加HAVING MAX(DocumentDate) BETWEEN @Start AND @EndHAVING实质上是聚合的WHERE子句。

+1

我是否必须将DocumentDate放在我的select语句的某处?我收到这个错误。列'dbo.FormInstance.DocumentDate'在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。 – user380432 2010-11-18 15:51:51

+2

您是否意外地遗漏了MAX()部分? – 2010-11-18 15:53:11

+0

没关系,我不好意思,我忘了MAX中有cluase谢谢! – user380432 2010-11-18 15:53:30