2013-06-25 106 views
0

基本查詢月份爲:T-SQL:排名前5的查詢

SELECT Top 5 
[Year], [Month], Title, Units, [Rank] 
from aTable 
WHERE [Year] = @Year and [Month] = @Month 
order by [Rank] desc 

我想添加什麼,是[排名前月5]列,那會告訴我了一些每個連續兩個月排名前5的排名已經排名5或更低。

+0

通過「連續兩個月的」你的意思是排除非連續兩個月?如果1月份是前5名,但不是2月份,3月份是前5名,那麼目前的計數不應該包括1月份? –

+0

是的,我的意思是連續有多少個月排名前五位。如果是一年的第5位,四月份排名第6位,五月份回到第3位,我想表明它已經在前5名爲1個月。 – Metaphor

+0

如果它不在目前沒有顯示在結果中的前5名? –

回答

1
;with myTable as (
    select 
     dateadd(yy,[Year]-1900,0) + dateadd(mm,[Month]-1,0) YearMonth, 
     Title, 
     Units, 
     Rank 
    from 
     aTable 
), 
results as (

    select 
     YearMonth, 
     Title, 
     Units, 
     [Rank] 
    from 
     myTable 
    where 
     YearMonth = dateadd(m,datediff(m,0,getdate()),0) and 
     Rank <= 5 
    union all 
    select 
     b.YearMonth, 
     b.Title, 
     b.Units, 
     0 Rank 
    from 
     myTable b 
     join results a on 
      b.Title = a.Title and 
      b.YearMonth = dateadd(m,-1,a.YearMonth) and 
      b.Rank <=5 
) 
select 
    max(YearMonth), 
    Title, 
    sum(Units) Units, 
    max(Rank) Rank, 
    count(*) MonthsInTop5 
from 
    results 
group by 
    Title 
order by 
    Rank Desc 
+0

OP要求連續5個月的計數,而不是總數。 –

+0

這很好,但就像山羊說的那樣,它顯示前5名的總月數,而不是最後的連續數。 – Metaphor

+0

答案將使用遞歸CTE。 –