1

列の最大値を見つけたい、と私は言います:

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

私は間違っていると思います。私は max() 関数が行を返し、列に列 MAX(Intensity.AverageDailyIntensCar) as maxvalueの最大値を設定することを期待していIntensity.AverageDailyIntensCarます。それは正しい?

4

4 に答える 4

2

Maxは集計関数です。列名では使用できません。使用している場合はMax、group by を使用します。

参照

于 2013-05-22T05:50:27.113 に答える
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'
于 2013-05-22T05:47:13.037 に答える
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
于 2013-05-22T06:02:26.377 に答える