Comment la somme du montant total pour les 12 derniers mois à l'aide des paramètres

Je voudrais résumer les 12 derniers mois, les valeurs à partir d'une requête sql.


Le problème est de résumer les 12 derniers mois, au lieu de prendre simplement l'ensemble de l'année.


Alors, quand je sélectionne Mars 2000 en tant que par défaut dans mes paramètre,

Je veux la requête pour résumer: à partir de Mars 1999-Mars 2000.

C'est ce que j'ai obtenu jusqu'à présent:

SELECT Name, SUM(sales) as totalsales, year_month
FROM Total_Sales
WHERE 
(year_month = @year_month)
GROUP BY Name, year_month

Merci pour toute aide!

--EDIT--

SELECT Name, SUM(sales) as totalsales, year_month
FROM Total_Sales
WHERE 
(year_month >= @From) AND 
(year_month <= @To)
GROUP BY Name, year_month

Ajouté après les suggestions de "Steve Morgan"


Peut-on ajouter une moyenne des 12 derniers mois, en quelque sorte, sans sélection de 12 mois dans les paramètres.
Laisser le "@ "Dans" paramètre de décider de la valeur de départ. Quelque chose comme: AVG(@à Partir de 12 mois)??

Merci encore pour l'aide!

--EDIT 2--

La ROW_NUMBER() fonction est très pratique pour résoudre ce problème.
Ma requête ressemble à ceci maintenant:

SELECT  Name, SUM(sales)
FROM    
(               
SELECT  rn = ROW_NUMBER() OVER (PARTITION BY Name ORDER BY year, year_month)
, Name
, sales = SUM(sales)
FROM     Total_Sales ts
WHERE
(year_month>= @From) AND 
(year_month<= @To)
GROUP BY
Name
, year
, year_month
    ) ts 
WHERE
rn <= 12    

GROUP BY
Name  
  • Ce type de la year_month champ?
  • year_month est: 1,2,3,4,5,6,7,8,9,10,11,12
  • Est-il aussi un mois ou la date de champ?
  • Votre solution n'est pas tout à fait ce que Lieven vous a donné. Essayez-la avec des feintes de données couvrant 2010-01 à 2011-12 pour un nom, et 2011-01 à 2011-12 pour un autre nom, puis d'exécuter votre requête pour 2010-06 à 2011-05. Je ne crois pas que cela vous donnera le résultat que vous recherchez. Quelle que soit la solution que vous adoptez, vous devez mettre des conditions à la fois de l'Année et Year_Month champs.
  • Ok vais essayer cela. Le changement que le year_month champ est créé par une mise à JOUR à l'aide de la "ans" & "mois" à partir de la table elle-même. de sorte qu'il ressemble à ceci maintenant: 2000_01, 2000_02 etc.
  • Si vous allez à modifier le schéma, vous pourriez être mieux avisé de rendre le champ DateTime avec un nom tel que MonthStart. La logique devient alors Beaucoup plus simple.

InformationsquelleAutor AceAlfred | 2011-08-02