SQL - Select 每个值的前 n 次出现

SQL - Select first n occurrences of each value

假设我有一个像这样的 table,只有数千条记录。

| Foo | Bar  | 
| 1   | A_1  | 
| 1   | A_2  | 
| 2   | B_1  | 
| 3   | B_1  | 
| 3   | B_2  | 
| 3   | B_1  | 
| 4   | B_3  | 
...

当我执行下面的代码时,我显然得到了 Bar 以 B 开头的每条记录。

SELECT Foo
FROM tableName
WHERE Bar LIKE 'B%'

我知道使用 GROUP BY 可以获得每条记录的前 1 条记录,但我需要的不止于此。使用 SELECT TOP 100 只会让我获得前 100 条记录,无论它们是哪条 "B",并且由于 B_1 值远远超过 100 个,这就是我所能得到的。

如何只获取每个唯一 B 的前 n 条记录?例如,B_1 的前 100 次出现,B_2 的前 100 次出现,等等

您可以尝试使用 ROWNUMBER() with PARTION BY

SELECT Foo, Bar
FROM 
   (
     SELECT
         Foo,
         Bar,
         ROW_NUMBER() OVER (PARTITION BY BAR ORDER BY FOO) AS RowCount
     FROM
        tableName
    ) AS data
WHERE 
    data.RowCount <= 100

您可以在 Bar:

上使用 ROW_NUMBERPARTITION
;With Cte As
(
    Select  Foo, Bar,
            Row_Number() Over (Partition By Bar Order By Foo Asc) As Row_Number
    From    tableName
    Where   Bar Like 'B%'
)
Select  Foo, Bar
From    Cte
Where   Row_Number <= 100