1

次の表があります。

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 週間を見つけます。

または、私ができるより良いことはありますか?

4

2 に答える 2