2017-04-19 41 views
0

我在寫一個查詢,它返回人每週提交的總數。喜歡下面...如何在我的SQL查詢中創建一個循環,該循環將查找每年的每個星期並返回每週的前10個值?

Person  WeekNumber  Total 
ABC   1   12 
ADE   1   10 
ACD   1    8 
LKJ   2    15 
HJK   2    14 
FGH   2    12 

到目前爲止,我有查詢做除了能夠從每週選擇頂部的人之外的一切。我想我可能需要使用循環來做到這一點,但只是想看看是否有人可能有更好/更容易的想法?

這裏是我的查詢:

Select sub.Person, sub.WeekNumber, sum(sr_id_count) as TotalSRID 
from 
(
    SELECT 
    Person, 
    DATEDIFF(week, '2016-12-25', create_date) AS WeekNumber, 
    count(SR_ID) as SR_ID_COUNT 
    from [dbo].[tbl_Hist] 
    where create_date >= '01/01/2017' 
     and SR_STatus <> 'Canceled' 
     and Created_by <> 'System' 
    group by person, create_date 
) sub 
group by sub.Person, sub.WeekNumber 
order by WeekNumber, TotalSRID desc 
+1

您的語法是SQL Server,但問題是標記爲MySQL。 –

+0

我道歉,編輯! – SMBRADBE

回答

1

的語法是SQL Server的,所以我會認爲這是你正在使用的數據庫。如果是這樣,你可以使用row_number()。每週獲得最高的人:

select * 
from (select Person, datediff(week, '2016-12-25', create_date) AS WeekNumber, 
      count(SR_ID) as SR_ID_COUNT, 
      row_number() over (partition by datediff(week, '2016-12-25', create_date order by count(SR_ID) desc) as seqnum 
     from [dbo].[tbl_Hist] 
     where create_date >= '2017-01-01' and SR_STatus <> 'Canceled' and 
      Created_by <> 'System' 
     group by person, datediff(week, '2016-12-25', create_date) 
    ) sub 
where seqnum = 1; 

如果你想每週前10名,然後使用seqnum <= 10

+0

這是近乎完美的,但一個小時我一直試圖將這部分代碼收回來,因爲它是必要的,我不能讓它仍然給我正確的結果。 AGH。 總和(sr_id_count)作爲TotalSRID 從 ( 選擇 人, DATEDIFF(周, '2016年12月25日',CREATE_DATE)AS WeekNumber, 計數(SR_ID)作爲SR_ID_COUNT 伯爵是第一位的,然後計數的總和,因爲我需要每週的總人數。任何你知道把(總數(count(sr_ID))在那裏加入的方法? – SMBRADBE