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;