2016-05-19 20 views
0

私は各通話の記録を持つテーブルを持っています。 私は30分ごとの平均コールレートが毎日の曜日別にセグメント化された行列を作成したいと考えています。各コールの日付/時刻である開始時刻を有する時刻 - 曜日と曜日別のSQL - AVGコール率

すなわち

Iは、列ヘッダとして行ヘッダと30分間隔として、月、日を表示します。コンテンツは、それぞれの特定の30分間のセグメントにおける毎日(月 - 日)の平均コール数です。これは私が持っているところですが、私が望むものではありません。それは、時間セグメントごとの呼び出しの数を合計し、私は平均を得る方法を考えることができません。

SQLは、私はその後、一時テーブルに挿入するWHILEループを作成穏やか:-)

set dateformat dmy 
SET DATEFIRST 1 -- Start with Monday 
SELECT datepart(dw,starttime) as 'Day', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS 'Midnight-12:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '12:30am-1am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '1am-1:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '1:30am-2am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '2am-2:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '2:30am-3am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '3am-3:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '3:30am-4am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '4am-4:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '4:30am-5am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '5am-5:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '5:30am-6am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '6am-6:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '6:30am-7am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '7am-7:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '7:30am-8am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '8:30am-9am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '9am-9:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '10:30am-11am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '11am-11:30am', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '11:30am-Noon', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS 'Noon-12:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '1pm-1:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '1:30pm-2pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '2pm-2:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '2:30pm-3pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '3pm-3:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '4:30pm-4pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '4pm-5:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '5:30pm-6pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '6pm-6:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '6:30pm-7pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '7pm-7:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '7:30pm-8pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '8pm-8:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '8:30pm-9pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '9pm-9:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '9:30pm-10pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '10pm-10:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '10:30pm-11pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) > 30) THEN 1 ELSE 0 END) AS '11pm-11:30pm', 
SUM(CASE WHEN (DATEPART(hour,StartTime) = 7 and DATEPART(Minute,StartTime) <= 30) THEN 1 ELSE 0 END) AS '11:30pm-Midnight' 

FROM [dbo].[CallList] 
where StartTime>'1/6/2015' 
     and StartTime<'30/6/2015' 
GROUP BY datepart(dw,starttime) 
ORDER BY datepart(dw,starttime) 

答えて

0

も頻繁に使用するものではありません -

は、私はいくつかのが正しい方向に私を指すことを願ってその事実が実行可能な選択肢の後に集約を行う。以下を参照してください:

CREATE TABLE #Data 
(
    ID UNIQUEIDENTIFIER 
    ,DateIn DATETIME 
) 

INSERT INTO #Data 
VALUES 
(NEWID(), '2016-05-17 00:01:00'), 
(NEWID(), '2016-05-17 00:21:00'), 
(NEWID(), '2016-05-17 01:01:00'), 
(NEWID(), '2016-05-17 05:41:00'), 
(NEWID(), '2016-05-17 06:51:00'), 
(NEWID(), '2016-05-17 13:21:00'), 
(NEWID(), '2016-05-17 18:01:00'), 
(NEWID(), '2016-05-17 21:11:00'), 
(NEWID(), '2016-05-17 23:41:00'), 
(NEWID(), '2016-05-17 23:51:00') 


DECLARE @Start DATETIME 
DECLARE @End DATETIME 

SET @Start = '2016-05-17 00:00:00' 
SET @End = '2016-05-17 00:30:00' 

CREATE TABLE #Temp 
(
    ID UNIQUEIDENTIFIER 
    ,[Time Increment] VARCHAR(100) 
) 

WHILE @End <= '2016-05-17 23:30:00' 
    BEGIN 
    INSERT INTO #Temp 
    SELECT 
    ID 
    ,CAST(@Start AS VARCHAR) + ' - ' + CAST(@End AS VARCHAR) [Time Increment] 
    FROM #Data 
    WHERE DateIn >= @Start 
    AND DateIn < @End 

    SET @Start = DATEADD(Minute, 30, @Start) 
    SET @End = DATEADD(Minute, 30, @End) 
    END 

SELECT 
[Time Increment] 
,COUNT(ID) [Count] 
FROM #Temp 
GROUP BY [Time Increment] 

DROP TABLE #Temp 
DROP TABLE #Data 

をこの例では、結果は次のとおりです。

Time Increment       |Count 
May 17 2016 1:00AM - May 17 2016 1:30AM | 1 
May 17 2016 1:00PM - May 17 2016 1:30PM | 1 
May 17 2016 5:30AM - May 17 2016 6:00AM | 1 
May 17 2016 6:00PM - May 17 2016 6:30PM | 1 
May 17 2016 6:30AM - May 17 2016 7:00AM | 1 
May 17 2016 9:00PM - May 17 2016 9:30PM | 1 
May 17 2016 12:00AM - May 17 2016 12:30AM | 2 
関連する問題