2008-12-08 91 views
3

中我有一個用戶表像這樣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的「限制」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

與內選擇:

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 

選擇的一組用戶,每個用戶在他們的社區的3位用戶在內部選擇返回由限制條款。

+1

這不起作用,因爲內部選擇可能會返回多個值。我使用的MySql版本不允許在內部選擇中使用LIMIT,所以我不能簡單地用「IN」替換「=」 – 2009-01-20 19:44:17

+0

啊,是的,老版本的MySQL可以是與之合作的痛苦。如果您無法限制內部選擇,我不確定您可以做什麼。 – 2009-01-20 20:54:46

0

這是你的意思嗎?

SELECT registration_date 
FROM user 
ORDER BY registration_date 
LIMIT n 

ñ是你關注的用戶。