用于查找特定类型数据集的列的前n个值的SQL查询

时间:2011-11-23 00:39:39

标签: sql sql-server

我有一些数据 - 不同公司不同年份的销售数据。 所以我有该公司的公司IDYearSales(当年)。

我想要的是为每个拥有数据的公司获取销售的TOP n值以及相应的公司IDYear

SO中还有其他查询,但它们适用于单个列的直接TOP n值(没有像此处所需的条件)。

任何帮助将不胜感激......

3 个答案:

答案 0 :(得分:5)

你可能需要这样的东西:

select
    CompanyName,
    Year,
    Sales

from (
    select *, 
    row_number() over (partition by CompanyName order by Sales desc) as RowNbr 

    from data) src

where RowNbr <= 5

order by CompanyName, Sales desc

只需用您喜欢的任何数字替换5即可。

答案 1 :(得分:3)

如果您是SQL 2005+,CTE方法将起作用:

WITH salesWithRank AS
(
   SELECT CompanyID, Year, Sales
      , RANK() OVER (PARTITION BY CompanyId ORDER BY Sales DESC) AS RowNumber
   FROM SalesData
)
SELECT CompanyID, Year, Sales
FROM salesWithRank AS s
WHERE RowNumber <= 10 -- Top 10 sales for each CompanyId, any year
ORDER BY CompanyId ASC, Sales DESC

注意,如果表中有CompanyName,您也可以使用它来排序。

答案 2 :(得分:0)

直接前进:

SELECT TOP 3 CompanyID, Year, Sales
FROM (SELECT CompanyID, Year, Sales, 
             ROW_NUMBER() OVER(ORDER BY CompanyID ASC,Sales DESC) AS RowNumber 
      FROM TargetTbl) AS TempTable
ORDER BY RowNumber ASC

编辑:用您想要的n值(最高行数)替换3。