1

I want to find maximum column value, i says:

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)

But get error:

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. 

So i add GROUP BY Segment_ID.Segment_ID but get same error for next column.
How to use max() function correctly?

UPD

I think i asking wrong. Bucouse i expect that max() function return me row and set in column MAX(Intensity.AverageDailyIntensCar) as maxvalue a max value of Intensity.AverageDailyIntensCar column. Thats right?

Kliver Max
  • 5,107
  • 22
  • 95
  • 148

4 Answers4

2

Max is an aggregate function, you can not use it with column name. if you are using Max then use group by.

Reference

Community
  • 1
  • 1
Amit
  • 15,217
  • 8
  • 46
  • 68
2

Try this:

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)
StuffHappens
  • 6,457
  • 13
  • 70
  • 95
1

Try this one -

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

Update:

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'
Devart
  • 119,203
  • 23
  • 166
  • 186
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
bummi
  • 27,123
  • 14
  • 62
  • 101