在 SQL Server 2008 中,我RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)
使用RANK
. 但是我每个分区都有数百条记录,所以我会从排名 1、2、3......999 中获取值。但我只希望每个最多 2RANKs
个PARTITION
。
例子:
ID Name Score Subject
1 Joe 100 Math
2 Jim 99 Math
3 Tim 98 Math
4 Joe 99 History
5 Jim 100 History
6 Tim 89 History
7 Joe 80 Geography
8 Tim 100 Geography
9 Jim 99 Geography
我希望结果是:
SELECT Subject, Name, RANK() OVER (PARTITION BY Subject ORDER BY Score DESC)
FROM Table
Subject Name Rank
Math Joe 1
Math Jim 2
History Jim 1
History Joe 2
Geography Tim 1
Geography Jim 2
我只想在每个类别中排名 1 和 2。我该怎么做呢?
您可以将原始查询 using
rank()
放入子查询中,并用过滤结果的查询包装它。我认为在 SQL Server 中执行此操作的方法是将窗口函数与公共表表达式结合起来:
对于 Teradara,您也可以这样做: