在sql中为每个组选择前10条记录

时间:2014-12-02 12:09:33

标签: sql-server

我有以下表格

小时,PATHID,持续时间,事件,CELLID,信道

这里每个cellid有四个pathId(即0,1,2,3),每个pathId有很多事件,频道和持续时间。

现在我想为每个cellid显示前10条记录(每条pathId)。

(我们通过cellid,pathid和channel分组持续时间..我们根据持续时间将每个pathid排在前十位)

我有50+ cellid,每个cellid有4个pathid(即0,1,2,3)

请帮帮我

SampleTable

outputtable

1 个答案:

答案 0 :(得分:3)

  

我想显示每个cellid的前10条记录(pathId)。

您可以使用ROW_NUMBER()功能执行此操作,例如:

WITH Ranked
AS
(
   SELECT
     Hour,PathId,Duration,Event,CellId,Channel,
     ROW_NUMBER() OVER(PARTITION BY cellid ORDER BY pathId) AS RN
   FROM tablename
)
SELECT Hour,PathId,Duration,Event,CellId,Channel
FROM Ranked
WHERE RN <= 10

函数ROW_NUMBER() OVER(PARTITION BY cellid ORDER BY pathId)将生成排名编号,为每组pathId排序cellid,然后获得前10名。(请注意,这将按{{1}排序提升)。