2009-11-01 21 views

回答

4

在SQL Server和Oracle中,您可以使用ROW_NUMBER()來標記每個用戶的記錄。下面的查詢標籤RN上該用戶的最新行= 1,RN = 2的第二最新,以此類推:

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

是必需的子查詢,因爲你不能在WHERE使用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 2009-11-01 11:21:40