2010-02-24 3 views
1

Désolé si le titre est confus. Voici la requête que j'aiComment puis-je commander ma requête par un champ et un groupe par un sous-ensemble de ce champ dans db2?

Select MONTH(DATE(TIMESTAMP)), SUM(FIELD1), SUM(FIELD2) from TABLE WHERE TIMESTAMP BETWEEN '2009-07-26 00:00:00' AND '2010-02-24 23:59:59' GROUP BY MONTH(DATE(TIMESTAMP)) 

Ceci me permettra d'obtenir le numéro du mois hors de la requête. Le problème est que, pour l'instant, il s'agit de trier les mois 1,2,3,4 ... quand il couvre deux années distinctes. Je dois être capable de trier cette requête par année puis par mois.

Si j'ajoute « ORDER BY TIMESTAMP » à la fin de ma requête je reçois cette erreur:

colonne TIMESTAMP ou une expression dans la liste SELECT pas valide. SQLCODE = -122

Aussi je changé les noms de champs pour cette question de garder clairement le champ n'est pas réellement appelé TIMESTAMP

+0

Il est étrange que vous ne pouvez pas commander par un champ d'horodatage, je le fais tout le temps. – casraf

Répondre

2

Vous devez regrouper par année puis le mois .:

SELECT YEAR(YourField), 
Month(YourField), 
SUM(Field1), 
SUM(Field2) 
FROM Table 
WHERE... 
GROUP BY 
YEAR(YourField), 
Month(YourField) 
ORDER BY 
YEAR(YourField), 
Month(YourField) 
+0

TThanks pour la réponse rapide. Cela fonctionne très bien. – Mike

Questions connexes