max()函数如何在SQL-Server中工作?

时间:2013-05-22 05:45:45

标签: sql sql-server

我想找到最大列值,我说:

SELECT 
Segment_ID.Segment_ID,
Intensity.Date,
Intensity.NumAll,
Intensity.AverageDailyIntensCar,
MAX(Intensity.AverageDailyIntensCar) as maxvalue,
Track.the_geom
FROM Segment_ID
LEFT JOIN Track ON Segment_ID.Segment_ID=Track.Segment_ID
LEFT JOIN Intensity ON Segment_ID.Segment_ID=Intensity.Segment_ID
where (DATEPART(yy, Intensity.Date) = 2009
AND DATEPART(mm, Intensity.Date) = 08
AND DATEPART(dd, Intensity.Date) = 14)

但是得到错误:

Column `Segment_ID.Segment_ID` is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

所以我添加了GROUP BY Segment_ID.Segment_ID,但下一栏也出现了相同的错误 如何正确使用max()函数?

UPD

我想我错了。 Bucouse我希望max()函数返回行并在列MAX(Intensity.AverageDailyIntensCar) as maxvalue中设置最大值Intensity.AverageDailyIntensCar列。那是对的吗?

4 个答案:

答案 0 :(得分:2)

Max是一个聚合函数,您不能将它与列名一起使用。如果您使用Max,请使用group by。

Reference

答案 1 :(得分:2)

试试这个:

SELECT 
Segment_ID.Segment_ID,
Intensity.Date,
Intensity.NumAll,
Intensity.AverageDailyIntensCar,
MAX(Intensity.AverageDailyIntensCar)OVER() as maxvalue,
Track.the_geom
FROM Segment_ID
LEFT JOIN Track ON Segment_ID.Segment_ID=Track.Segment_ID
LEFT JOIN Intensity ON Segment_ID.Segment_ID=Intensity.Segment_ID
where (DATEPART(yy, Intensity.Date) = 2009
AND DATEPART(mm, Intensity.Date) = 08
AND DATEPART(dd, Intensity.Date) = 14)

答案 2 :(得分:1)

试试这个 -

SELECT 
    s.Segment_ID,
    i.Date,
    i.NumAll,
    MAX(i.AverageDailyIntensCar) AS maxAverageDailyIntensCar,
    t.the_geom
FROM dbo.Segment_ID s
LEFT JOIN dbo.Track t ON s.Segment_ID = t.Segment_ID
LEFT JOIN dbo.Intensity i ON s.Segment_ID = i.Segment_ID
WHERE i.Date = '20090814'
GROUP BY 
    s.Segment_ID,
    i.Date,
    i.NumAll,
    t.the_geom

<强>更新

SELECT 
      s.Segment_ID
    , i.[Date]
    , i.NumAll
    , mx.maxAverageDailyIntensCar
    , t.the_geom
FROM dbo.Segment_ID s
LEFT JOIN dbo.Track t ON s.Segment_ID = t.Segment_ID
LEFT JOIN dbo.Intensity i ON s.Segment_ID = i.Segment_ID
LEFT JOIN (
    SELECT 
          i.Segment_ID
        , maxAverageDailyIntensCar = MAX(i.AverageDailyIntensCar)
    FROM dbo.Intensity i
    GROUP BY i.Segment_ID
) mx ON s.Segment_ID = mx.Segment_ID
WHERE i.[Date] = '20090814'

答案 3 :(得分:0)

;With cte AS
(
SELECT 
Segment_ID.Segment_ID,
Intensity.Date,
Intensity.NumAll,
Intensity.AverageDailyIntensCar
Track.the_geom
FROM Segment_ID
LEFT JOIN Track ON Segment_ID.Segment_ID=Track.Segment_ID
LEFT JOIN Intensity ON Segment_ID.Segment_ID=Intensity.Segment_ID
where (DATEPART(yy, Intensity.Date) = 2009
AND DATEPART(mm, Intensity.Date) = 08
AND DATEPART(dd, Intensity.Date) = 14)
)
Select *,(Select MAX(AverageDailyIntensCar) from CTE) as maxvalue
from CTE