2016-09-29 4 views
0

NTILEを使っていくつかのクエリを試みましたが、毎年四分位を計算するためには機能しません。 SQLクエリは以下のとおりです。毎年計算四分位のためのSQLクエリを書く方法

select distinct datepart(Week,startingdate) as Week,datepart(year,startingdate) as years,sum(users+isnull(tbl_MobileGoogleAnalyticsData.M_Users,0)) as users 
into #googleanalyticsUsers 
from tbl_GoogleAnalyticsData 
left join tbl_MobileGoogleAnalyticsData on tbl_GoogleAnalyticsData.actualdate=tbl_MobileGoogleAnalyticsData.M_ActualDate 
group by datepart(Week,startingdate) ,datepart(year,startingdate) 

select distinct Week, years,users from #googleanalyticsUsers order by years asc 

select distinct week,NTILE(4) OVER(ORDER BY years DESC) AS Quartile,years 
from #googleanalyticsUsers 
order by years asc 

問題は、私は賢明週にデータを持っているので、私は今年のすべての13週を合計する必要がある(四半期ごと意味)と、この合計は毎年起こるはずです。方法は私を助けてください。

答えて

0

1月1日に関係なく、あなたの四半期は完全な13週間ですか?その場合(52*7=364)、四半期の1つに1または2(閏年)の追加料金がかかります。あなたは52週以上も持っています。あなたは、週の始まりではなく、実際の日にNTILEを使用することで利益を得ることができます。

いずれにしても、NTILEParition byOrder byを使用して週を注文し、四半期にグループ化することができます。ここで

は、日付の配列との一例である

;With SequenceNum as 
(
    Select ROW_NUMBER() Over (Order By C1.Ordinal_Position) Adder 
    From INFORMATION_SCHEMA.COLUMNS C1, INFORMATION_SCHEMA.COLUMNS C2 
), 
DateList as 
(
    Select DateAdd (D, Adder-1, '1/1/2000') as OneDate 
    From SequenceNum 
    Where Adder < (365 *10) /* only get 10 years of data*/ 
) 
Select 
    OneDate, 
    DatePart (Year, OneDate) YearNum, 
    DatePart (Week, OneDate) WeekNum, 
    NTILE(4) Over (Partition By DatePart (Year, OneDate) Order By DatePart (Week, OneDate)) TileValue 
From DateList 
関連する問題