У меня есть такая таблица пользователей
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" SQL. Например, для сообщества с 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.
Ваше здоровье, Дон


С внутренним выбором:
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 во внутреннем выборе.
Ах да, работать со старыми версиями MySQL может быть непросто. Я не уверен, что вы можете сделать, если не можете ОГРАНИЧИТЬ внутренний выбор.
Вероятно, вам придется разбить его на несколько операторов из-за ограничений вашей версии.
Это то, что вы имеете в виду?
SELECT registration_date
FROM user
ORDER BY registration_date
LIMIT n
Где п - пользователь, о котором вы беспокоитесь.
Нет, я хочу получить дату регистрации N-го пользователя для каждого сообщества
Это не работает, потому что внутренний выбор может возвращать более одного значения. Версия MySql, которую я использую, не позволяет использовать LIMIT внутри внутреннего выбора, поэтому я не могу просто заменить " = " на "IN"