9
votes

Comment grouper chaque jour à PL / SQL?

im essayant d'obtenir des statistiques pour chaque jour avec PL / SQL.

Chaque jour a plusieurs entrées, des bukkets d'erreurs :-) Je veux les regrouper par jour. p>

Que fais-il actuellement : P>

SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY MONTH, DAY, errormessage


0 commentaires

3 Réponses :


4
votes

Votre problème est un problème d'étendue. Le groupe Groupe par fait partie de l'expression de la table de l'instruction et est donc évaluée avant la clause SELECT , c'est-à-dire la projection. Cela signifie que vos alias projetés ne sont pas disponibles au moment du regroupement. Ceci est une solution xxx

ceci est une autre: xxx

comportement non standard

Notez que certaines bases de données ( Y compris MySQL, PostgreSQL et d'autres personnes) permettent de référencer des alias de colonne de la projection dans le groupe clause . Dans les dialectes SQL SQL (tels que Oracle) qui ne devraient pas être possibles, bien que


0 commentaires

2
votes
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP by TO_CHAR(dateTime, 'DD'), TO_CHAR(dateTime, 'MM'), errormessage
you can't use aliases in group by

0 commentaires

19
votes
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY TO_CHAR(dateTime, 'DD'), TO_CHAR(dateTime, 'MM'), errormessage
Column aliases are no good for GROUP BY, you need the full expression.

2 commentaires

Merci! Acceptanse en 8 min: D


Heureux d'aider, et vous devriez également consulter la réponse de @Lukas Ederer, dans certains cas, sa solution est meilleure pour la lisibilité.