Коррелированный запрос: выберите, где условие не максимальное (условие во внутреннем запросе) - PullRequest
3 голосов
/ 19 июля 2011

Я пытаюсь выбрать все строки, в которых дублируются userName и groupId, и userId не является максимальным userId для этой комбинации userName / groupId. Вот мой код:

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)

дает мне ошибку.

Как правильно выполнить этот запрос?

Ответы [ 2 ]

3 голосов
/ 19 июля 2011
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
1 голос
/ 19 июля 2011

Это должно сделать это, я думаю:

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
...