SQL: получить N-й элемент в каждой группе - PullRequest
3 голосов
/ 08 декабря 2008

У меня есть такая таблица пользователей

user_id | community_id | registration_date
--------------------------------------------
1       |     1        | 2008-01-01
2       |     1        | 2008-05-01
3       |     2        | 2008-01-28
4       |     2        | 2008-07-22
5       |     3        | 2008-01-11

Для каждого сообщества я хотел бы узнать время, когда был зарегистрирован третий пользователь. Я легко могу сделать это для отдельного сообщества, используя расширение MySql «limit». Например, для сообщества с ID = 2

select registration_date
from user
order by registration_date
where community_id = 2
limit 2, 1

Кроме того, я могу получить дату, когда первый пользователь зарегистрировался во всех сообществах, через:

select community_id, min(registration_date) 
from user 
group by 1

Но я не могу понять, как получить дату регистрации третьего пользователя для всех сообществ в одном выражении SQL.

Cheers, Дон

Ответы [ 2 ]

2 голосов
/ 08 декабря 2008

С внутренним выбором:

select 
  registration_date, community_id 
from 
  user outer 
where 
  user_id IN (
    select 
      user_id 
    from 
      user inner 
    where 
      inner.community_id = outer.community_id 
    order by 
      registration_date 
    limit 2,1
  )
order by registration_date

Выбирает набор пользователей, где каждый пользователь является третьим пользователем в их сообществе, как это возвращено в предложении limit во внутреннем выборе.

0 голосов
/ 08 декабря 2008

Это то, что вы имеете в виду?

SELECT registration_date
FROM user
ORDER BY registration_date
LIMIT n

Где n - это пользователь, которого вы беспокоите.

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