次の表があります。
DECLARE @TBL_RESULT Table
(
ID varchar(10),
CreateDate DateTime,
PEOPLE_CODE_ID varchar(10),
CONVERSION_DATE DateTime,
CAMPUS varchar(20),
DAYS_TOOK int
);
このテーブルには、2013 年 1 月 1 日から現在までに受信して変換されたすべてのリードのレコードが含まれています。
最初に、過去 10 週間に到着したリードを変換するのにかかった時間の中央値を見つけ、それらをキャンパス別にグループ化する必要がありました。以下の SQL クエリを使用してそれを行うことができました。
WITH CTE_RESULT
AS ( SELECT *
FROM @TBL_RESULT
WHERE CreateDate > DATEADD(WEEK, -10, GETDATE())
)
SELECT Campus ,
AVG(DAYS_TOOK) AS MedianTime
FROM ( SELECT CAMPUS ,
Days_Took ,
ROW_NUMBER() OVER ( PARTITION BY Campus ORDER BY Days_Took ASC ) AS AgeRank ,
COUNT(*) OVER ( PARTITION BY CAMPUS ) AS CampusCount
FROM CTE_RESULT
) x
WHERE x.AgeRank IN ( x.CampusCount / 2 + 1, ( x.CampusCount + 1 ) / 2 )
GROUP BY x.Campus
ここで、この傾向をグラフにプロットする必要があります。つまり、過去 10 週間のバケットのレコードを見つけて、折れ線グラフに中央値をプロットします (各線は 1 つのキャンパスです)。(キャンパス別)
カーソルは私の唯一のオプションですか? ここでは、1 月 1 日から始まる最初の 10 週間のリードを見つけ、上記の SQL クエリを実行して中央値を取得し、それを一時テーブルにプッシュしてから、次の 10 週間を見つけます。
または、私ができるより良いことはありますか?