SQL: получить N-й элемент в каждой группе

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

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.

Ваше здоровье, Дон

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
0
1 527
2

Ответы 2

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

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, которую я использую, не позволяет использовать LIMIT внутри внутреннего выбора, поэтому я не могу просто заменить " = " на "IN"

Dónal 20.01.2009 22:44

Ах да, работать со старыми версиями MySQL может быть непросто. Я не уверен, что вы можете сделать, если не можете ОГРАНИЧИТЬ внутренний выбор.

Adam Bellaire 20.01.2009 23:54

Вероятно, вам придется разбить его на несколько операторов из-за ограничений вашей версии.

Adam Bellaire 20.01.2009 23:56

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

SELECT registration_date
FROM user
ORDER BY registration_date
LIMIT n

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

Нет, я хочу получить дату регистрации N-го пользователя для каждого сообщества

Dónal 08.12.2008 19:15

Другие вопросы по теме