2017-03-22 29 views
2

私は変更が必要なクエリがあります。現在、各参照には15分のブロックとアカウント番号が関連付けられています。私の目標は、ブロック中に最も頻繁に発生したアカウント番号を示す15分ブロックごとに1つの行を持つことです。これは特定のグループで最も一般的な値を見つける

output

私は参照番号は必要ありませんが、私は出力を与える

SELECT 
left(cast(Concat([Hour],':',[Minute]) as time),5) as [Time Block] 
,[Reference] 
,[Account] 

from(

    SELECT 
DATEPART(hh,[Start Time]) as [Hour] 
,[Reference] 
,case when DATEPART(mi,[Start Time]) between 00 and 15 then '00' 
when DATEPART(mi,[Start Time]) between 15 and 30 then '15' 
     when DATEPART(mi,[Start Time]) between 30 and 45 then '30' 
     when DATEPART(mi,[Start Time]) between 45 and 100 then '00' 
     else 'Error' end AS [Minute] 

     ,[Account] 

    FROM [iPR].[dbo].[InboundCallsView] 

    where [Start Time] between '2017-03-21' and '2017-03-22')T 

    order by [Time Block] 

午後12時00 310523

0時15 310523

00:30 310523

など、24時間に15分ごとに最も多くの行を持つアカウントを表示します。これは可能ですか?

答えて

5

この値は、モードと呼ばれます。

with cte as (<your query here>) 
select timeblock, account 
from (select timeblock, account, count(*) as cnt, 
      row_number() over (partition by timeblock order by count(*) desc) as seqnum 
     from cte 
     group by timeblock, account 
    ) t 
where seqnum = 1; 

最も一般的な結びつきの場合、これは任意に1つの値を返します。それらのすべてが必要な場合は、rank()またはdense_rank()を使用してください。

+0

ありがとうございます:) – tomdemaine

関連する問題