1

アプリケーション アクティビティを記録するテーブルがあります。各行には、DateTime ("Time") と "EventType" 列が含まれています... (明らかに、ここでは重要でない他のいくつか)

1 時間ごとに発生するさまざまな EventType の数を取得できるようにしたいと考えています。

私は現在、単一の EventType の基本的なカウントを取得しています:

select DATEADD(hh, (DATEDIFF(hh,0,Time)),0) as 'hour', count(*) as 'apploads' 
from PlaySessionEvent
where EventType = 0
Group By DATEADD(hh,(DATEDIFF(hh,0,Time)),0)
order by hour

これを拡張して、同じ時間内に複数の異なる EventType をカウントする最も簡単な方法は何ですか?

::アップデート

指定する必要がありましたが、使用可能なすべての EventTypes のサブセットのみが必要なため、EventType でグループ化しただけではありません。(つまり、退屈なトレース/デバッグ データではありません) また、DateTime エントリを複製する行を追加するのではなく、さまざまなイベント タイプを列として表示する必要がありました。

例えば...

DateTime           EventType1        EventType2
12:12:12 12/12/12  45                22

不正確な最初の質問をお詫びします。

4

1 に答える 1

4
select EventType, DATEADD(hh, (DATEDIFF(hh,0,Time)),0) as 'hour', count(*) as 'apploads'  
from PlaySessionEvent 
where EventType = 0 
Group By DATEADD(hh,(DATEDIFF(hh,0,Time)),0), EventType
order by hour 

編集:

変更された質問に対する新しい解決策:

select DATEADD(hh, (DATEDIFF(hh,0,Time)),0) as 'hour', count(*) as 'apploads', 
sum(case when EventType = 1 then 1 else 0 end) EventType1,
sum(case when EventType = 2 then 1 else 0 end) EventType2
from PlaySessionEvent 
where EventType = 0 
group By DATEDIFF(hh,0,Time)
order by hour 

以下は、少し異なる書き方です。

select DATEADD(hh, (DATEDIFF(hh,0,Time)),0) as [hour], 
       COUNT(*) [apploads], 
       COUNT(case when EventType = 1 then 1 end) EventType1,
       COUNT(case when EventType = 2 then 1 end) EventType2
from PlaySessionEvent 
where EventType = 0 
group By DATEDIFF(hh,0,Time)
order by hour 
于 2012-04-16T09:27:28.663 に答える