2016-09-29 281 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或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