2009-11-01 3 views

답변

4

SQL Server와 Oracle에서 ROW_NUMBER()를 사용하여 사용자 당 레코드에 레이블을 지정할 수 있습니다. 해당 사용자의 최신 행에 1 = RN 다음 쿼리 태그는 두 번째 최근에 = 2 RN과 :

select * 
from (
    select 
     row_number() over (partition by uid order by UpdateDt desc) 
     as rn 
    , * 
    from YourTable 
) sub 
where rn <= 3 

하위 쿼리가 필요합니다 당신은 어디에서 ROW_NUMBER()를 사용할 수 없기 때문에 절 직접.

MySQL을 사용하는 경우이 문제는 훨씬 어렵습니다. 다음은 solution with user variables에 대한 링크입니다.

1
DECLARE @Top tinyint; 

SELECT @Top = ABS(CHECKSUM(NEWID())) % 5 + 1; 

;WITH MyCTE AS 
(
    SELECT 
     stuff, things, 
     ROW_NUMBER() OVER (PARTITION BY uid ORDER BY UpdatedDateTime DESC) AS Ranking 
    FROM 
     MyTable 
) 
SELECT 
    stuff, things 
FROM 
    MyCTE 
WHERE 
    Ranking <= @Top 
+0

TopCount = @Top – eugeneK

관련 문제