Par exemple, imaginez une table comme ci-dessous
select accountid, createdon from account 73C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:47.000 A7C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:48.000 B7C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:48.000 FBC56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:49.000 CBC66F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:54.000 87C66F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:53.000 53C76F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:55.000 87C76F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:56.000 2ED89924-5CFC-E111-A4F8-005056977FBC 2012-09-11 22:01:51.000 C0D79924-5CFC-E111-A4F8-005056977FBC 2012-09-11 22:01:49.000
puis en Janvier 2012, le count était de 10 counts avec cette requête
select count(*) from account
Disons que j'ai 5 nouveaux counts en février 2012, puis l'interrogation count(*)
en février 2012 renvoie 15 counts. Si j'ai 10 nouveaux counts en mars 2012, la requête count(*)
en mars 2012 renvoie 35 counts au total.
J'aimerais get les résultats ci-dessous
2012-january-10 accounts 2012-febrary-15 accounts 2012-march- 35 accounts
date de création dans le count de la table est la date,
mais si je fais cette requête
select year(createdon), month(createdon), count(*) quantity from accounts group by year(createdon), month(createdon)
Je reçois le résultat ci-dessous à la place:
2012-january-10 accounts 2012-febrary-5 accounts 2012-march- 20 accounts
alors comment puis-je get le premier résultat avec une simple requête? pas de loops
Vous avez besoin d'un total roulant. Il existe plusieurs façons de le faire dans SQL Server (voir Calculer un total en cours d'exécution dans SQL Server ), mais pour SQL 2005 le plus simple (pas le plus rapide) serait auto-jointure
with cte as ( select datename(year, createdon) + '-' + datename(month, createdon) as name, convert(nvarchar(6), createdon, 112) as grp, count(*) as cnt from account group by datename(month, createdon), datename(year, createdon), convert(nvarchar(6), createdon, 112) ) select c1.name, sum(c2.cnt) as cnt from cte as c1 inner join cte as c2 on c2.grp <= c1.grp group by c1.name
sql fiddle démo