如何返回按日期分组的一组行的最大值

时间:2012-04-30 16:43:58

标签: sql sql-server aggregate

所以我需要找到zCumuEnrolled的最大数量并仅返回一次值。这就是我到目前为止。

SELECT Distinct(MAX(zCumuEnrolled)) as total, 
       DateName(mm,zDate) as date, 
       DatePart(yyyy,zDate) as date2
FROM vRecruitment  
Where zDate Between '2010-05-01' AND '2010-05-30' 
GROUP BY zDate

当我这样做时,我得到:

total|Date|Date2
    0| May|2010
    1| May|2010

我真正想要的只是返回总数= 1的记录。任何建议都会非常感激!!!提前谢谢!

4 个答案:

答案 0 :(得分:2)

您按完整日期分组,要获得正确的结果,您需要按月和年分组。 将所有日期设置为XXXX-XX-01格式,然后按此表达式分组。

dateadd(day, - datePart(day, zDate) + 1, zDate)

尝试下一个代码

SELECT 
    MAX(zCumuEnrolled) as total,
    DateName(mm, d) as date1,
    DatePart(yyyy, d) as date2
FROM 
    (select *, dateadd(day, - datePart(day, zDate) + 1, zDate) as d from vRecruitment) t
Where 
    zDate Between '2010-05-01' AND '2010-05-30' 
GROUP BY 
    d

如果你想通过monthes获得最大值

,这种方法很有效

答案 1 :(得分:1)

按zDate分组会导致结果为zDate的每个不同值创建记录;如果您想要在整个日期范围内获得最大值,请删除GROUP BY子句。 (为什么你需要Max才能与众不同?)

答案 2 :(得分:1)

Select Max(zCumuEnrolled) as Total From ZRecruitment 
where zDate Between '2010-05-01' AND '2010-05-30'

如果我找到你,有点混乱的问题。如果您想要具有该最大值的记录的月份和年份,则必须澄清。

PS怎么能最大限度地计算......

答案 3 :(得分:0)

像这样:

SELECT zCumuEnrolled, zDate
FROM vRecruitment  
Where zDate Between '2010-05-01' AND '2010-05-30' 
    AND zCumuEnrolled = (SELECT MAX(zCumuEnrolled) FROM vRecruitment)

这是你想要做的吗?