Pay*_* Sh 1 t-sql sql-server select group-by greatest-n-per-group
我有一个有3列的表Item,City和VisitNumber.
在这张表中有很多记录,我需要选择每个城市的前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项.