我有一些数据 - 不同公司不同年份的销售数据。
所以我有该公司的公司ID
,Year
和Sales
(当年)。
我想要的是为每个拥有数据的公司获取销售的TOP n
值以及相应的公司ID
和Year
。
SO中还有其他查询,但它们适用于单个列的直接TOP n
值(没有像此处所需的条件)。
任何帮助将不胜感激......
答案 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。