2017-04-19 17 views
0

私は1週間あたりの人の投稿の総数を返すクエリを書いています。以下のように...どうすれば毎週の毎週を探し、毎週トップ10の値を返すSQLクエリでループを作成できますか?

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()を使用できます。あなたは週にトップ10をしたい場合は、その後、

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; 

seqnum <= 10を使用:週のトップの人を取得します。

+0

これはほぼ完璧ですが、コードのこの部分を必要に応じて取り込んでいますが、正しい結果を得るためにはそれを得ることができません。 AGH。 からTotalSRID として合計(sr_id_count)( WeekNumber AS 人、 DATEDIFF(週、 '2016年12月25日'、CREATE_DATE)を選択し、 数(SR_ID)、その後SR_ID_COUNT カウントが最初に来る、などその週の1人あたりの総数が必要なので、合計の合計(sum(count(sr_ID))を何らかの形で組み込むことがわかりますか? – SMBRADBE

関連する問題