2011-04-05 3 views
1

Besoin de créer une requête montrant combien les clients dépensent de l'argent par semaine, mois, trimestre, 6 mois et un an sur un jeu en ligne quotidien. Il y a un champ date de création de champ (datetime) lorsqu'un client entre dans le jeu.demande de frais client

Quelqu'un peut-il aider?

+0

Vous devrez fournir plus de détails sur votre schéma/base de données pour quelqu'un pour vous aider un peu mieux, mais vous cherchez des fonctions d'agrégation ici, quelque chose comme: SEMAINE SELECT (e.CreateDate) Semaine, SUM (Dépenses) SemainesExpédition FROM Dépenses e WHERE YEAR (e.CreateDate) = 2011 GROUPE PAR SEMAINE (e.CreateDate). S'il vous plaît noter que c'est un pseudo-code car il n'y a pas de DB et les fonctions de date ont tendance à différer – Mirko

+0

bien im en utilisant SQL Server 2008 ... Et il dit qu'il n'y a pas intégré dans la fonction hebdomadaire ... Le truc c'est que j'ai besoin d'une idée trouvé ces clients frais dans différents intervalles dans la même requête ... Notez que les clients sont irréguliers. –

Répondre

2

Peut-être quelque chose comme ça.

declare @T table (CreatedDate datetime, MoneySpent int) 

insert into @T values 
('201', 5), 
('20100101', 10), 
('20100102', 20), 
('20100103', 30), 
('20110104', 40), 
('20110105', 50), 
('20110106', 60), 
('20110107', 70) 

-- per year 
select 
    sum(MoneySpent) Spent, 
    year(CreatedDate) [Year] 
from @T 
group by year(CreatedDate) 

-- per month 
select 
    sum(MoneySpent) Spent, 
    year(CreatedDate) [Year], 
    month(CreatedDate) [Month] 
from @T 
group by year(CreatedDate), month(CreatedDate) 

-- per half year 
select 
    sum(MoneySpent) Spent, 
    year(CreatedDate) [Year], 
    case when month(CreatedDate) <= 6 then 'First' else 'Second' end [HalfYear] 
from @T 
group by year(CreatedDate), case when month(CreatedDate) <= 6 then 'First' else 'Second' end 

-- per quarter 
select 
    sum(MoneySpent) Spent, 
    year(CreatedDate) [Year], 
    ((month(CreatedDate)-1) % 4)+1 [Quarter] 
from @T 
group by year(CreatedDate), ((month(CreatedDate)-1) % 4)+1 

-- per week 
select 
    sum(MoneySpent) Spent, 
    year(CreatedDate) [Year], 
    datepart(iso_week, CreatedDate) [Week] 
from @T 
group by year(CreatedDate), datepart(iso_week, CreatedDate) 

Résultat

Spent  Year 
----------- ----------- 
65   2010 
220   2011 

Spent  Year  Month 
----------- ----------- ----------- 
60   2010  1 
220   2011  1 
5   2010  12 

Spent  Year  HalfYear 
----------- ----------- -------- 
60   2010  First 
220   2011  First 
5   2010  Second 

Spent  Year  Quarter 
----------- ----------- ----------- 
60   2010  1 
220   2011  1 
5   2010  4 

Spent  Year  Week 
----------- ----------- ----------- 
220   2011  1 
5   2010  52 
60   2010  53