2013-01-22 6 views
0

Quelqu'un peut-il aider à une déclaration SQL que j'essaie d'écrire? J'utilise SSRS r1 (Sql ou d'une solution SSRS est très bien)SQL cumulatif précédent 12 mois - répartition par mois

Comment:

  • show split mesure de comptage par mois et l'année
  • pour chacun de ces mois, je veux compter cumulatif 12 mois précédents

2012 jan: counts feb 2011 - jan 2012 
2012 feb: counts mar 2011 - feb 2012 
2012 mar: counts apr 2011 - mar 2012 

J'ai commencé ce code, mais il est incorrect, mais il vous donne une idée de ce que je suis en train de réaliser (cette question est que je dois mois calc et l'année d'une date)

select 
    count(a.measure) count 
    ,month(a.StartDate) 
    ,year(a.StartDate) 
from 
    a 
where 
    a.StartDate >= DATEADD(mm,DATEDIFF(mm,0,@datepromt)-12,0) as startdateYrAgo --1st month 1 year ago 01/01/2012 
    and a.StartDate <= DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@datepromt)+1,0)) as startdateEOM --last day of month 31/01/2013 
group by 
    month(a.StartDate) 
    ,year(a.StartDate) 
+2

Qu'avez-vous essayé? avez-vous vérifié les fonctions de date déjà? quelle est ta question? – jcho360

+3

Bienvenue dans Stack Overflow! Je vous suggère de lire la FAQ pour apprendre à poser une question dans StackOverflow [FAQ] (http://stackoverflow.com/faq#howtoask). Une bonne règle est: une question commençant par «j'ai besoin» n'est pas une bonne question. – Tchoupi

+0

Qu'est-ce que vous voulez voir pour 'dec 2011'? –

Répondre

0

Ici vous avez une idée pour la requête, il faut regarder quelque chose comme ci-dessous;

SELECT 
periods.year 
,periods.month 
,measures.cnt 
FROM (
    SELECT DISTINCT 
     year = YEAR(StartDate) 
    , month = MONTH(StartDate) 
    , month_running = DATEDIFF(mm, 0, StartDate) 
    FROM a 
    GROUP BY YEAR(StartDate), MONTH(StartDate), DATEDIFF(mm, 0, StartDate) 
) periods 
JOIN (
    SELECT month_running = DATEDIFF(mm, 0, StartDate), cnt = COUNT(measure) 
    FROM a 
    GROUP BY DATEDIFF(mm, 0, StartDate) 
) measures 
ON measures.month_running BETWEEN periods.month_running - 12 AND periods.month_running - 1 
+0

Vraiment sympa de sql merci. Il m'a fallu un moment pour comprendre qu'il retournait plusieurs lignes pour chaque mois, mais c'était le chiffre mensuel pour les mois précédents et j'ai ensuite dû les totaliser pour obtenir le total cumulé du mois. – user2001784

+0

Cool! Je suis content que ça t'a aidé – pkmiec

Questions connexes