2009-04-06 9 views
3

J'essaie de faire un rapport mais j'ai des problèmes avec mon SQL NMI.Groupe SQL par "date" question

J'ai une table où la date de fermeture d'une transaction est stockée.

Je veux savoir combien de transactions par mois il y avait donc je l'ai fait:

SELECT trunct(closedate, 'MONTH') FROM MY_TRANSACTIONS 

J'utilise Oracle.

Je reçois une liste comme ceci:

2002-09-01 00:00:00.0 
2002-09-01 00:00:00.0 
... 
2002-10-01 00:00:00.0 
2002-10-01 00:00:00.0 
... 
2002-11-01 00:00:00.0 
2002-11-01 00:00:00.0 

etc.

Je pensais « Si j'ajoute un COUNT() dans la sélection et GROUP BY à la fin de la déclaration devrait faire "mais ce n'est pas le cas. Ma conjecture est parce que chaque enregistrement est traité comme une valeur différente: -S

Un indice s'il vous plaît?

Merci.

+0

@Joel: Merci pour les nouvelles balises. Est-ce vraiment PL-SQL? – OscarRyz

+0

@Oscar: L'utilisation de TRUNC() de cette manière est spécifique à Oracle. Mais le problème que vous voyez avec GROUP BY est indépendant du fournisseur; C'est ainsi que fonctionne toute implémentation compatible SQL. –

Répondre

11

Vous souhaitez regrouper tous les champs non-agg. Et vous ne voulez pas tronquer la date, vous voulez la partie du mois de la date.

donc quelque chose comme

sélectionnez to_char (datefield, 'Mois'), count (*) de ... par groupe to_char (datefield, 'Mois');

+0

@Arnshea: Merci. Savez-vous quel est l'équivalent oracle pour "datepart" ??? – OscarRyz

+0

to_char (datefield, 'Month') devrait le faire –

+0

@Arnshea: Il a fait (en partie) parce que je pense est la somme de tous les décembres des dernières années ... – OscarRyz