SQL:获取每组中的第 N 个项目
Posted
技术标签:
【中文标题】SQL:获取每组中的第 N 个项目【英文标题】:SQL: get Nth item in each group 【发布时间】:2008-12-08 15:54:05 【问题描述】:我有一个这样的用户表
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 语句中获取所有个社区的第三个用户的注册日期。
干杯, 唐
【问题讨论】:
【参考方案1】:使用内部选择:
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
选择用户集合,其中每个用户都是社区中的第三个用户,由内部选择中的限制子句返回。
【讨论】:
这不起作用,因为内部选择可能返回多个值。我正在使用的 MySql 版本不允许在内部选择中使用 LIMIT,所以我不能简单地将“=”替换为“IN” 啊,是的,使用旧版本的 MySQL 可能会很痛苦。如果你不能 LIMIT 内部选择,我不确定你能做什么。 由于您的版本限制,您可能不得不将其分解为多个语句。【参考方案2】:这是你的意思吗?
SELECT registration_date
FROM user
ORDER BY registration_date
LIMIT n
n 是您关注的用户。
【讨论】:
不,我想获取每个社区的第 N 个用户注册日期以上是关于SQL:获取每组中的第 N 个项目的主要内容,如果未能解决你的问题,请参考以下文章