2017-03-22 11 views
0

SQL Serverから特定のデータを取得するように求められました。これは、その日のデータを公開するピーク時間です。別のクエリで特定の日のピーク時を管理しました。 SQL 2012のselectステートメントで時間間隔の差(つまり5分、つまり10:05 - 10:10)

私は、このようになります間隔5minsインナー問い合わせの

select 
    count(pbcnt) as county, --MIN(pubpeakhr) , 
    cast(MIN(DATEPART(HOUR,pubpeakhr)) as varchar) + ':00 - ' + RIGHT('0' + cast(MIN(DATEPART(MINUTE,pubpeakhr) + 5) as varchar), 2) + ':00' 
from 
    (select 
     count(pub_cnt) pbcnt, 
     CONVERT(CHAR(19), CONVERT(SMALLDATETIME, dateadd(hh, 
     CASE WHEN 
      time >= '3/' + CAST((8-DATEPART(dw,'3/1/' + CAST(YEAR (time) as varchar)))%7 + 8 as varchar) + '/' + CAST(YEAR(time) as varchar) + ' 7:00' 
      AND 
      time < '11/' + CAST((8-DATEPART(dw,'11/1/' + CAST(YEAR(time) as varchar)))%7 + 1 as varchar) + '/' + CAST(YEAR(time) as varchar) + ' 6:00' 
     THEN -4 ELSE -5 END, time) , 121),121) as pubpeakhr 
    from 
     tblpub ev 
    INNER JOIN 
     tblver v ON ev.id= v.id 
    Where 
     1=1 and v.time>= '2016-05-01'  
    group by 
     v.time) aa 
where 
    1=1 
    and (pubpeakhr) >= '2017-03-07 10:00:00' 
    and (pubpeakhr) <= '2017-03-07 10:59:59' 
group by 
    (DATEPART(MINUTE, pubpeakhr)/5) 
order by 2 

出力用のデータを取得するには、次のクエリを使用

enter image description here

出力:

Output of the query in an Excel sheet

してください私は列2のための望ましい出力を得るためにSQLをフレームに入れます。

注:column1(郡)は正しいです。私は入力レコードを持っていないとして予め

+3

実際の問題を説明するタイトルを検索してください。 – jarlh

+0

あなたのポストには優れたシートはなく、出力もありません。詳細を表示 – PRABA

+0

出力のExcelシートにアクセスできません。 –

答えて

0

おかげで、私は一時テーブルとしてあなたの出力を考慮し、その上にロジックを書きました。あなたは同じことに従うこともできます。

create table #tmp1 
(
counts int, 
timeperiod smalldatetime 
) 
insert into #tmp1 values (3,'3/7/2017 10:02'),(37,'3/7/2017 10:05'),(2,'3/7/2017 10:06'),(28,'3/7/2017 10:09'), 
      (32,'3/7/2017 10:11'),(1,'3/7/2017 10:17'),(31,'3/7/2017 10:20'),(22,'3/7/2017 10:23'),(22,'3/7/2017 10:24'), 
      (44,'3/7/2017 10:26'),(2,'3/7/2017 10:31') 
;with CTE as 
(select left(RIGHT(T1.timeperiod,7),2) + ':' + 
     IIF(LEN(cast((row_number() over (order by timeperiod)-1) * 5 as varchar(2)))=1, 
      '0'+cast((row_number() over (order by timeperiod)-1) * 5 as varchar(2)), 
      cast((row_number() over (order by timeperiod)-1) * 5 as varchar(2)) 
      ) starttime, 
     left(RIGHT(T1.timeperiod,7),2)+':'+ 
     IIF(LEN(cast((row_number() over (order by timeperiod)) * 5 as varchar(2)))=1, 
      '0'+cast((row_number() over (order by timeperiod)) * 5 as varchar(2)), 
      cast((row_number() over (order by timeperiod)) * 5 as varchar(2)) 
      ) endtime 
from #tmp1 T1 
) 
select sum(T.counts) counts, starttime + '- ' + endtime peakhour 
from CTE C inner join #tmp1 T on T.timeperiod > cast(left(timeperiod,11)+' ' +C.starttime as smalldatetime) and 
T.timeperiod <= cast(left(timeperiod,11)+' ' +C.endtime as smalldatetime) 
group by starttime + '- ' + endtime 

drop table #tmp1 
+0

質問を編集しました。 –

+0

編集した内容が明確ではありません。最初のテーブルのみ(内部クエリーの出力)まで出力されていることを意味しますか? 2番目のテーブルではありませんか? –

+0

ええ、正しい..私は内側のクエリのための出力を希望通りにしています。 –

関連する問題