我有一個表'articles':id/uid/last_update/content。SQL問題:如何在每個記錄組中選擇任意數量的記錄?
我想構造一個sql語句,用於選擇最近從表中更新的每個用戶(由uid標識)的任意數字(比如3)記錄。我怎樣才能做到這一點?
我有一個表'articles':id/uid/last_update/content。SQL問題:如何在每個記錄組中選擇任意數量的記錄?
我想構造一個sql語句,用於選擇最近從表中更新的每個用戶(由uid標識)的任意數字(比如3)記錄。我怎樣才能做到這一點?
在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。
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
TopCount = @Top – eugeneK 2009-11-01 11:21:40