Sql 为列的每个唯一值选择最多N行
我有一个包含以下列的表:Sql 为列的每个唯一值选择最多N行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个包含以下列的表: First Name, Last Name, Age 假设我们有 2名年龄=25岁的人 6名年龄=26岁的人 10名年龄=27岁的人 我想获得一个记录集,每个年龄段最多有N条记录。记录可能是随机的 你能给我一些建议吗 例如,如果N=3,那么我们将 2 records with age = 25 3 records with age = 26 3 records with age = 27 我将使用行数函数,因此: DECLARE @TopN INT; SET @To
First Name,
Last Name,
Age
假设我们有
2名年龄=25岁的人
6名年龄=26岁的人
10名年龄=27岁的人
我想获得一个记录集,每个年龄段最多有N条记录。记录可能是随机的
你能给我一些建议吗
例如,如果N=3,那么我们将
2 records with age = 25
3 records with age = 26
3 records with age = 27
我将使用行数函数,因此:
DECLARE @TopN INT;
SET @TopN = 3;
SELECT ...
FROM
(
SELECT ...,
RowNum = ROW_NUMBER() OVER(PARTITION BY t.Age ORDER BY t.LastName, t.FirstName)
FROM MySchema.MyTable AS t
) src
WHERE src.RowNum <= @TopN
我将使用行数函数,因此:
DECLARE @TopN INT;
SET @TopN = 3;
SELECT ...
FROM
(
SELECT ...,
RowNum = ROW_NUMBER() OVER(PARTITION BY t.Age ORDER BY t.LastName, t.FirstName)
FROM MySchema.MyTable AS t
) src
WHERE src.RowNum <= @TopN
可以使用ROW_NUMBER函数模拟此行为:
SELECT t.*
FROM (SELECT t.*, ROW_NUMBER() OVER (PARTITIN BY age ORDER BY 1) as rk
FROM some_table
) t
WHERE rk <= 3;
可以使用ROW_NUMBER函数模拟此行为:
SELECT t.*
FROM (SELECT t.*, ROW_NUMBER() OVER (PARTITIN BY age ORDER BY 1) as rk
FROM some_table
) t
WHERE rk <= 3;