Как написать этот запрос? - PullRequest
2 голосов
/ 08 апреля 2011

У меня есть таблица, содержащая пользователей ... так или иначе, некоторые пользователи были удвоены (имеют несколько записей).Я хочу получить каждую запись пользователя по отдельности по адресу электронной почты, а для пользователей, у которых есть несколько записей, я хочу получить только запись с наибольшим количеством входов в систему.

--USERS----------------------------
ID EMAIL           TOTAL_LOGINS
1  blah@blah.com   3
2  blah@blah.com   1
3  bloop@blah.com  1
4  bloop@blah.com  45
5  blarp@blah.com  6
6  flag@blah.com   2

Я хочу, чтобы запрос был возвращен:это:

ID EMAIL           TOTAL_LOGINS
1  blah@blah.com   3
4  bloop@blah.com  45
5  blarp@blah.com  6
6  flag@blah.com   2

Может кто-нибудь помочь мне с этим вопросом?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 08 апреля 2011
SELECT    EMAIL, MAX(TOTAL_LOGINS)
FROM      USERS
GROUP BY  EMAIL

РЕДАКТИРОВАТЬ:

Это будет делать то, что вы хотите в MS SQL.

SELECT    * -- Bad practice. I'm just showing that you can select anything.
FROM      USERS
WHERE     ID = (SELECT    TOP 1 ID
                FROM      USERS u
                WHERE     u.EMAIL = USERS.EMAIL
                ORDER BY  TOTAL_LOGINS DESC)
4 голосов
/ 08 апреля 2011
;WITH CTE AS
(
   SELECT *, ROW_NUMBER() OVER(PARTITION BY EMAIL ORDER BY TOTAL_LOGINS DESC) Corr
   FROM USERS
)

SELECT ID, EMAIL, TOTAL_LOGINS
FROM CTE
WHERE Corr = 1
1 голос
/ 08 апреля 2011

в mysql это будет выглядеть примерно так:

select * from users where email = '[...]' order by total_logins desc limit 1;

Я думаю, ваше решение будет выглядеть примерно так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...