2010-09-24 5 views
20

J'ai une table avec une colonne REGDATE, une date d'enregistrement (AAAA-MM-JJ HH: MM: SS). Je voudrais montrer un histogramme (ExtJS) afin de comprendre à quelle période des utilisateurs s'inscrivent. Je voudrais faire cela pour les douze derniers mois en ce qui concerne la date actuelle et pour regrouper les dates par semaine.Les 12 derniers mois, groupe par semaine

Des indices?

+0

dans quelle base de données SQL? –

Répondre

20

dans MySQL:

SELECT COUNT(*), DATE_FORMAT(regdate, "%X%V") AS regweek FROM table GROUP BY regweek; 

ou

SELECT COUNT(*), YEARWEEK(NOW(), 2) as regweek FROM table GROUP BY regweek; 

dans PostgreSQL:

SELECT COUNT(*), EXTRACT(YEAR FROM regdate)::text || EXTRACT(WEEK FROM regdate)::text AS regweek FROM table GROUP BY regweek; 
+4

J'ai essayé PostgreSQL et j'ai eu une erreur. A dû ajouter :: varchar après EXTRACT (YEAR). – bluemihai

+2

Pour ceux qui recherchent une version PostgreSQL, l'exemple de Tom Gerken ci-dessous est meilleur. Il limite à 12 mois, remet à zéro les dates et gère la date et l'heure de la conversion du texte. – keithhackbarth

0

Conseil: (SQL)

SELECT CONVERT (VARCHAR(7), REGDATE, 120) AS [RegistrationMonth] 
FROM ... 
GROUP BY CONVERT (VARCHAR(7), REGDATE, 120) 
ORDER BY CONVERT (VARCHAR(7), REGDATE, 120) 
25

FWIW dans PostgreSQL, Karaszi a une réponse qui fonctionne, mais il y a une requête plus rapide:

SELECT date_trunc('week', REGDATE) AS "Week" , count(*) AS "No. of users" 
FROM <<TABLE>> 
WHERE REGDATE > now() - interval '12 months' 
GROUP BY 1 
ORDER BY 1; 

Je me suis basé au large des travaux de Ben Goodacre

+0

Cela devrait être la réponse acceptée;) – Todd

3

Peut-être cela?

select to_char(REGDATE,'WW') "Week number", 
     count(*) "number of signups", 
from YOUR_TABLE 
where REGDATE > current_date-365 
group by to_char(REGDATE,'WW') 
order by to_char(REGDATE,'WW') 
+1

+1 pour l'utilisation de 'TO_CHAR'. Je voulais une semaine unique (plutôt que périodique par année) donc j'ai utilisé 'to_char (regdate, 'YYYY WW')', mais la même idée. – tscizzle

Questions connexes