2016-05-26 106 views
1

状況:私はtable1にmy_number、location、およびidのデータフィールドを持っています。テーブル2では、私はデータフィールド(他のものの中でも)id、site、dateを持っています。私はそれらをいくつかの同じデータフィールドとmy_numbersを持つ他のビュー/テーブル(cとa)に結合しています。SQL:集計関数またはGROUP BY句に含まれていないため、選択リストで無効です。

私の目標:各my_numberには複数のIDがあり、各サイトで最も大きなID値が必要です。だから私はサイトごとにグループを使いました。 次に、IDに基づいてmy_numberの 'date'を取得する必要があります。なぜなら、2番目のテーブルにはmy_numberというIDが関連付けられていないからです。 合計3つのサイトがあるため、各サイトに3つの最大ID値が必要です。 GROUP BYに表示されます

a.num a.site a.date c.OtherPart T2.date 
15   TN 1.1.16  17 3.19.16 
15   FL 2.21.16  17 4.22.16 
15   TX 1.7.15  17 3.21.16 
+0

私はあなたが少なくともあなたに間違いを与えている理由を知っていますか?サブクエリ内に「GROUP BY location」を置くことはできません。基本的には、存在しない値をグループ化するように指示しているので、それを実行できないので、集計関数(MAX)があるため、クエリでグループ化する他の値がないためエラーとなります。残りのクエリを含めてください。 – Dresden

+0

もし 'SELECT my_number、MAX(id)as id'を持っていれば** my_numberで' group by my_number'を持つ必要があります。 (期間) –

答えて

0

わからないまさにあなたがSQLのやりたい、あなただけの列をフェッチする必要があります。そして、私は

出力テーブルexはこれら3つのID値の「日付」を取得したいですまたは集約関数内の他の列は、とにかくこれをしてくださいしてみてください。

left join 
    (
     SELECT my_number, id 
     FROM table1 T1, 
      (SELECT location, MAX(id) as id 
      FROM table1 
      GROUP BY location) TMP 
     WHERE T1.id= TMP.id AND T1.location = TMP.location 
    ) newNum 
    on newNum.Part = c.OtherPart 

left join table2 t2 on t2.id = newNum.id and t2.site = a.site 

)そして、あなたはまた、SQLに従うことによって、このエラーを修正することができますが、ないかもしれないあなたが何をしたいのか、

left join 
    (
    SELECT location, MAX(id) as id 
    FROM table1 
    GROUP BY location 
    ) newNum 
    on newNum.Part = c.OtherPart 

left join table2 t2 on t2.id = newNum.id and t2.site = a.site 
1

max(column)のようなものをSQLクエリに入れると、max関数はグループの列の値のセットで動作しています。結果がグループ化されるようにグループを使用してクエリを定義した場合は、グループ化していないすべての列に複数の値があります。

あなたのケースでは、locationには1つの値(グループ化しているもの)がありますが、my_numberidには複数の値があります。 my_numberが(1,2,3,4)でidが(5,6,7,8)の場合、sum(my_number)またはmax(my_number)を表示できますが、明らかに1行に '番号 'my_number。それは数字ではなく、リストです。

これは、「集計関数またはGROUP BY句に含まれていないため、選択リストでSQL:が無効です」と表示されたときのことです。列my_columnを集計関数sumのように)動作します。また、group by節に追加すると動作します。

関連する問題