2
votes

Regrouper par mois et par année

J'essaie de compter les instances regroupées par mois et par année.

Month  |  Year  |  c

Ligne d'erreur 2: '+' ne peut pas être appliqué à bigint, varchar (1)

J'ai essayé d'échanger + pour & & || pour créer la chaîne souhaitée mais je n'ai pas de chance. p>


Comment puis-je produire un tableau comme ci-dessous:

Month Year  |  c

Comment puis-je produire ce tableau également:

SELECT 
    (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE))) as Issue_Month,
    COUNT(*) as c
FROM
    (sub query) t1
GROUP BY 
    (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE)))


2 commentaires

L'opérateur de concaténation pour Presto est || et non + (je pense).


Je ne sais pas ce qu'est presto, mais dans T-SQL, vous pouvez simplement regrouper par mois (…), année (…)


3 Réponses :


0
votes

Il semble que ce soit une façon de le faire pour obtenir un seul champ avec mois-année . Ce n’est certainement pas la meilleure façon d’accomplir cela

CONCAT(CAST(MONTH(CAST(t1.some_date as DATE)) as Varchar(2))  , '-' , CAST(YEAR(CAST(t1.some_date as DATE)) as  Varchar(4))) as Issue_Month,


0 commentaires

0
votes

vous pouvez essayer quelque chose comme ceci:

SELECT 
    (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE))) as Issue_Month,
    COUNT(*) as c
FROM
    (sub query) t1
GROUP BY 
    (MONTH(CAST(t1.some_date as DATE)), YEAR(CAST(t1.some_date as DATE)))

La clause de regroupement n'a pas besoin de bla + bla . Vous pouvez simplement les inclure tels qu'ils sont. btw, parce que vous n'utilisez aucune autre table pour baser vos mois, vous n'obtiendrez que des mois avec des décomptes de mois contenant des Problèmes . Pour résoudre ce problème, vous pouvez utiliser un autre tableau qui conserve tous les mois et toutes les données que vous souhaitez avoir pour chaque mois (jours qu'il contient, forme abrégée, trimestre annuel, jours fériés, etc.) et joindre à gauche Issue_Month à ladite table, et GROUP BY la table principale des mois.


0 commentaires

4
votes

7 commentaires

Beaucoup plus intuitif et propre: testez maintenant


Que diriez-vous de commander ceci? J'ai essayé ORDER BY la même expression mais elle est triée par mois, donc j'ai tous les janvier pour les années regroupés, puis février, et ainsi de suite.


Pourquoi ne pas formater comme % Y '% m' au lieu de '% m% Y' ?


Cela a fonctionné même si ce n'est pas intuitif (du moins pour moi. Dans Excel / VBA, le format n'aurait pas d'importance - le tri fonctionne de la même manière). Clairement encore nouveau dans SQL. Merci d'avoir répondu aux deux questions - je sais que c'est une mauvaise pratique newb: 0


date_format () renvoie une chaîne de sorte que le tri est alphanumérique. Excel fait un format sur la couche de présentation, en conservant la valeur d'origine.


Ça a du sens. Je m'attendais à ce que date_format () renvoie une date


Si vous voulez le format MMYYYY, vous pouvez essayer ceci: GROUP BY date_format (CAST (t1.some_date as DATE), '% m% Y'), date_format (CAST (t1.some_date as DATE), '% Y% m ') ORDER BY date_format (CAST (t1.some_date comme DATE),'% Y% m ') bien que ce ne soit pas si efficace et plus compliqué.