SQL:在每个组中获取第N个项目

时间:2008-12-08 15:54:06

标签: sql mysql

我有一个像这样的用户表

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的“限制”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语句中获取所有社区的第三个用户的注册日期。

干杯, 唐

2 个答案:

答案 0 :(得分: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子句返回。

答案 1 :(得分:0)

这是你的意思吗?

SELECT registration_date
FROM user
ORDER BY registration_date
LIMIT n

n 是您关注的用户。