2016-09-29 3 views
0

Ich habe einige Abfrage mit NTILE versucht, aber es funktioniert nicht für die Berechnung Quartile jedes Jahr. SQL-Abfrage ist unten.Wie schreibe ich SQL-Abfrage für Computing Quartile jedes Jahr

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 

Problem ist ich Daten in Woche haben klug, also muss ich jede 13. Woche des Jahres summieren (bedeutet vierteljährlich) und diese Summe sollte jedes Jahr passiert. Wie bitte, hilf mir bitte.

Antwort

0

Ist Ihr Quartal eine volle 13 Woche eingestellt, egal an welchem ​​Tag der 1. Januar fällt? In diesem Fall (52*7=364) wird eines Ihrer Quartiere 1 oder 2 (Schaltjahr) Tage zusätzlich haben. Sie werden auch mehr als 52 Wochen haben. Sie können davon profitieren, NTILE über den tatsächlichen Tag statt den Beginn der Woche zu verwenden.

In jedem Fall können Sie NTILE und Parition by und Order by verwenden Ihre Wochen und gruppieren sie in Viertel zu bestellen. Hier

ist ein Beispiel mit einer Reihe von Daten

;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 
Verwandte Themen