每组选择前20行

Pay*_* Sh 1 t-sql sql-server select group-by greatest-n-per-group

我有一个有3列的表Item,CityVisitNumber.

在这张表中有很多记录,我需要选择每个城市的前20项(根据他们的访问数量).

例如,如果华盛顿有100个项目,纽约有250个项目,洛杉矶有500个项目,我需要为每个城市选择60个最常访问的行(华盛顿20个,纽约20个,洛杉矶20个)

怎么可能TSQL

jpw*_*jpw 13

最简单的方法是使用row_number()窗口函数根据其访问次数降序为每个城市的行编号,并将其用作过滤器.此查询应该适用于2005年以后的任何SQL Server版本.

select * 
from (
    select *, r = row_number() over (partition by City order by VisitNumber desc) 
    from your_table
    ) a 
where r <= 20
  and City in ('Washington', 'New York', 'Los Angeles')
Run Code Online (Sandbox Code Playgroud)

这将为where子句中指定的每个城市选择前20项.