2015-08-25 21 views
0

我有一个简单的查询 - 但我需要它来只返回顶部ñ的基础上当月记录的数量,同时也显示出新这个排名中列....所以最高的是1等SQL前五名记录每月和新列显示这个级别

SELECT Purchase.Money 
     , Employee.FName 
     , Employee.LName  
     , DateName(month, Purchase.Date) AS MonthName 
     , Year(Purchase.Date) AS Year 
     , Purchase.Date 
FROM DB.Purchase.Purchase  
INNER JOIN DB.Employee.Employee   
ON Purchase.ID=Person.ID   
WHERE Purchase.Date BETWEEN '20001-01-01' AND '2002-01-01'    
group by 
    Employee.FirstName  
    , Employee.LastName 
    , Employee.ID 
    , Purchase.TotalDue 
    , DateName(month, Purchase.Date) 
    , Year(Purchase.Date) 
    , Purchase.Date 
ORDER BY Year(Purchase.Date), 
     DateName(month,Purchase.Date), 
     Purchase.Money DESC 
+0

MySQL和MS SQL服务器是两种不同的产品,也有不同的SQL功能,其中之一是你USI NG? (不要标记不涉及的产品。) – jarlh

+0

Opps,对不起有可能是一个建议的标签 - 顺便说一下,我将会在将来添加标签时谨慎使用MS SQL。 – HolyUnicow

回答

1

使用row_number()

with cte as (<your query here>) 
select t.* 
from (select t.*, 
      row_number() over (partition by MonthName, year order by money desc) as seqnum 
     from cte 
    ) t 
where seqnum <= 5;