[英]SQL Server : how to select top 2 records of the same group?
我正在使用SQL Server2008。我有一個問題,我需要獲取由2列Code
和Period
確定的組中的前2條記錄,然后將它們插入到另一個表中。
這是一個示例表:
Code | Period | Dept | DeptWorkPartSum
001 2013-11 D1 53
001 2013-11 D2 33
001 2013-11 D3 12
002 2013-11 D2 30
002 2013-11 D4 28
002 2013-11 D5 15
002 2013-12 D2 100
我想擺脫的是:
Code | Period | Dept | DeptWorkPartSum
001 2013-11 D1 53
001 2013-11 D2 33
002 2013-11 D2 30
002 2013-11 D4 28
002 2013-12 D2 100
這可能是一個非常簡單的解決方案,但目前無法確定。
一種簡單的方法是使用具有ROW_NUMBER
排名功能的CTE
:
WITH CTE AS
(
SELECT Code,Period,Dept,DeptWorkPartSum,
RN = ROW_NUMBER() OVER (PARTITION BY Code,Period, Dept
ORDER BY DeptWorkPartSum)
FROM dbo.TableName
)
SELECT Code,Period,Dept,DeptWorkPartSum
FROM CTE
WHERE RN <= 2
但是,您期望的結果似乎不正確,因為對於所有這三個代碼, Dept
均不同。
也許您不想按Dept
分組而是按Dept
分組,那么結果是正確的:
WITH CTE AS
(
SELECT Code,Period,Dept,DeptWorkPartSum,
RN = ROW_NUMBER() OVER (PARTITION BY Code,Period
ORDER BY Dept, DeptWorkPartSum)
FROM dbo.TableName
)
SELECT Code,Period,Dept,DeptWorkPartSum
FROM CTE
WHERE RN <= 2
SELECT Code, Period, Dept, DeptWorkPartSum
FROM (
SELECT Code, Period, Dept, DeptWorkPartSum
,ROW_NUMBER ( ) OVER ( PARTITION BY Code, Period, Dept ORDER BY DeptWorkPartSum DESC) r
FROM table) q
WHERE r <= 2
try this:
with cte as
(
select *,ROW_NUMBER() over (partition by Code,Period,Dept order by Code) as rn from table
)
select Code,Period,Dept,DeptWorkPartSum from cte where rn<=2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.