2011-07-19 20 views
3

userNameとgroupIdが重複しているすべての行を選択しようとしていますが、そのuserNameとgroupIdの組み合わせのuserIdが最大userIdではありません。ここに私のコードは、これまでのところです:関連クエリ:条件が最大でない条件(内部クエリの条件)

select * 
from userTable u 
where exists 
    (select * 
    from userTable u1 
    where userName <> '' and userName is not null 
    and u.userName = u1.userName and u.groupId = u1.groupId 
    and u.userId <> max(u1.userId) 
    group by userName, groupId 
    having count(*) > 1) 
order by userName 

はしかし、ライン:

and u.userId <> u1.max(userId) 

は私にエラーを与えています。

このクエリを実行する正しい方法は何ですか?

+1

マイナータイプミス、 'u1.max(USERID)' '' MAX(u1.userId)でなければなりませんが、私は考えていませんそれは問題を解決するでしょう。 – rubish

+0

@ Rubish-ありがとう!私はタイプミスを修正するためにそれを編集します。 – dmr

答えて

3
SELECT u.* 
FROM (
     SELECT userName, groupId, MAX(userId) AS maxId 
     FROM userTable 
     GROUP BY 
       userName, groupId 
     HAVING COUNT(*) > 1 
     ) q 
JOIN userTable u 
ON  u.userName = q.userName 
     AND u.groupId = q.groupId 
     AND u.userId <> q.maxId 
+0

も同様の回答を出していました。 – rubish

1

これはそれを行う必要があり、私は思う:

select t.* 
from dbo.UserTable t 
join (select userName , groupID , maxUserID = max(userID) 
     from dbo.UserTable x 
     group by userName , groupID 
     having count(*) > 1 
    ) dupes on dupes.userName = t.userName 
      and dupes.groupID = t.groupID 
      and dupes.maxUserID > t.userID