2009-07-14 6 views
3

次のエラーが発生します。(joinを使用)集計関数またはGROUP BYエラーに含まれていない

[Microsoft] [ODBC SQL Server Driver] [SQL Server]列「STATS.VisitorIP」は、集計関数またはGROUP BY句に含まれていないため、選択リストでは無効です。

両方の選択リストでVISITORIP列を使用しました。私はそれらの1つにGROUP BY句を使用したので、VISITORIPを追加しました。しかし、私は他の選択肢にGROUP BY節がないので、それを追加しませんでした。このエラーが発生するのはなぜですか?

SELECT S.VISITORIP, S.HTTPADDRESS, S.DATEENTERED 
FROM STATS S 
JOIN (SELECT S1.VISITORIP, MAX(S1.DATEENTERED) FROM STATS S1 WHERE DATEENTERED BETWEEN '" & OnlineTime & "' AND '" & NOW() & "') S1 
ON S.VISITORIP = S1.VISITORIP AND S.DATEENTERED = S1.DATEENTERED 
WHERE S.DATEENTERED BETWEEN '" &TIME& "' AND '" & NOW() & "' 
GROUP BY S.VISITORIP, S.HTTPADDRESS, S.DATEENTERED 
ORDER BY S.DATEENTERED DESC 

答えて

5

あなたは、各VISITORIPのためのMAX DATEENTEREDを取得しようとしているので、あなたは、ネストされたサブクエリでGROUP BYを必要としています。 VISITORIPはそのサブクエリのSELECTに存在するため、各visitoripの最新の日付を返すためにGROUP BYも必要です。

SELECT S.VISITORIP, S.HTTPADDRESS, S.DATEENTERED 
FROM STATS S 
JOIN (SELECT S1.VISITORIP, MAX(S1.DATEENTERED) FROM STATS S1 WHERE DATEENTERED BETWEEN '" & OnlineTime & "' AND '" & NOW() & "' GROUP BY S1.VISITORIP) S1 
ON S.VISITORIP = S1.VISITORIP AND S.DATEENTERED = S1.DATEENTERED 
WHERE S.DATEENTERED BETWEEN '" &TIME& "' AND '" & NOW() & "' 
GROUP BY S.VISITORIP, S.HTTPADDRESS, S.DATEENTERED 
ORDER BY S.DATEENTERED DESC 
1

この(ネストされたクエリ)が有効ではありません。

SELECT S1.VISITORIP, MAX(S1.DATEENTERED) 
FROM STATS S1 
WHERE DATEENTERED BETWEEN '" & OnlineTime & "' AND '" & NOW() & "' 

それは次のようになります。

SELECT S1.VISITORIP, MAX(S1.DATEENTERED) AS DATEENTERED 
FROM STATS S1 
WHERE DATEENTERED BETWEEN '" & OnlineTime & "' AND '" & NOW() & "' 
GROUP BY S1.VISITORIP 
1

あなたの内側のSELECTがDATEENTEREDにMAXを使用していますが、VisitorIPにGROUPBYが含まれていません。 。

JOINの中にあなたの副選択ので、あなたがエラーを取得している
SELECT S.VISITORIP, S.HTTPADDRESS, S.DATEENTERED 
FROM STATS S 
JOIN (SELECT S1.VISITORIP, MAX(S1.DATEENTERED) 
    FROM STATS S1 
    WHERE DATEENTERED BETWEEN '" & OnlineTime & "' AND '" & NOW() & "' 
    GROUPBY S1.VISITORIP) S1 
ON S.VISITORIP = S1.VISITORIP AND S.DATEENTERED = S1.DATEENTERED 
WHERE S.DATEENTERED BETWEEN '" &TIME& "' AND '" & NOW() & "' 
GROUP BY S.VISITORIP, S.HTTPADDRESS, S.DATEENTERED 
ORDER BY S.DATEENTERED DESC 
1

SELECT S1.VISITORIP, MAX(S1.DATEENTERED) FROM STATS S1 WHERE DATEENTERED BETWEEN '" & OnlineTime & "' AND '" & NOW() & "' 

は「DATEENTERED」を集約しようとしますが、そうするためには「VISITORIP」のグループに必要です。

試してみてください。

SELECT S1.VISITORIP, MAX(S1.DATEENTERED) FROM STATS S1 WHERE DATEENTERED BETWEEN '" & OnlineTime & "' AND '" & NOW() & "' GROUP BY S1.VISITORIP 
関連する問題