Dry*_*ong 1 sql t-sql sql-server sql-server-2005
假设我有一张这样的表,只有数千条记录.
| Foo | Bar |
| 1 | A_1 |
| 1 | A_2 |
| 2 | B_1 |
| 3 | B_1 |
| 3 | B_2 |
| 3 | B_1 |
| 4 | B_3 |
...
Run Code Online (Sandbox Code Playgroud)
当我执行下面的代码时,我显然得到了Bar以B开头的每一条记录.
SELECT Foo
FROM tableName
WHERE Bar LIKE 'B%'
Run Code Online (Sandbox Code Playgroud)
我知道使用GROUP BY会得到每个的前1个记录,但我需要的不仅仅是那个.使用SELECT TOP 100只会记录前100条记录,无论它们是哪个"B",并且因为有超过100个B_1值,所以我将获得所有这些.
我怎样才能获得每个唯一B 的前n条记录?例如,B_1的前100次出现,B_2的前100次出现等.
您可以使用ROW_NUMBER一个PARTITION在酒吧:
;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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |