我想找到最大列值,我说:
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
列。那是对的吗?
答案 0 :(得分:2)
Max
是一个聚合函数,您不能将它与列名一起使用。如果您使用Max
,请使用group by。
答案 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