J'ai une table qui contiendra un ensemble de colonnes une des colonnes une colonne de date.
Je dois compter combien d'occurrences de la valeur de cette colonne se réfèrent au même mois. Et revenez si pendant un mois, cela comporte des somme supérieures à 3. P>
par exemple: p> Ceci ne doit pas renvoyer aucune valeur. Parce qu'il n'a pas le nombre nécessaire de répétitions. P> mais cela il fait: p> pour le mois de novembre. P> Est pour un dB oracle. P> p>
9 Réponses :
Peut être faux mais une supposition:
Non, la somme des dates supérieures à 3 doit également correspondre au même mois.
Ceci devrait fonctionner pour MySQL et MSSQL:
SELECT MONTH(date), Sum(MONTH(date)) FROM table GROUP BY date HAVING Sum(MONTH(date)) > 3
SELECT COUNT(date) , TRUNC(DATE,'MON') FROM TABLE GROUP BY TRUNC(DATE,'MON') HAVING COUNT(DATE) > 3
ORA-00904: "Mois": identifiant invalide
Quels docs? Mois n'est pas une fonction Oracle. Quoi qu'il en soit, je me sens généreux aujourd'hui alors j'ai édité votre réponse :)
Merci beaucoup, je ne savais pas qu'il utilisait Oracle.
Donc, si 3 colonnes contiennent 1999-01-XX, vous voulez obtenir cette récupération?
SELECT * FROM table INNER JOIN ( SELECT YEAR(date) as y, MONTH(date) as m FROM table GROUP BY YEAR(date), MONTH(date) HAVING COUNT(*) > 3 ) as virtualTable ON virtualTable.y = YEAR(date) AND virtualTable.m = MONTH(date)
Je ne suis pas sûr de la base de données que vous utilisez. p>
dans la requête MySQL sera similaire à la méthode proposée par sur SQL Server Vous avez d'autres possibilités intéressantes. p>
Lire le ce Article < / a> pour plus de détails. p> @then code> p>
Idéalement, vous devez créer une procédure stockée qui accepte les deux critères dont vous avez besoin, mois (entier) et limite (entier)
dans une procédure paramétrée qui exécute le texte suivant P>
SELECT CAST(YEAR(Date) AS NVARCHAR) + '.' + CAST(MONTH(Date) AS NVARCHAR) AS 'The ', MONTH(Date ) AS TheMonth, COUNT(MONTH(Date)) AS TheMonthCount FROM Audit_Entry GROUP BY MONTH(Date), CAST(YEAR(Date) AS NVARCHAR) + '.' + CAST(MONTH(Date) AS NVARCHAR) HAVING (COUNT(MONTH(Date)) > @limit) AND (MONTH(Date) = @month)
Vous pouvez utiliser l'extrait d'extrait d'Oracle:
select theMonth, sum(monthCount) from ( select extract(MONTH FROM t.theDateColumn) as theMonth, 1 as monthCount ) group by theMonth having sum(monthCount) >= 3
create table x (date_col date); insert into x values (date '1998-09-02'); insert into x values (date '1998-09-03'); insert into x values (date '1998-09-12'); insert into x values (date '1998-09-14'); insert into x values (date '1998-10-02'); insert into x values (date '1998-11-21'); SELECT TRUNC(date_col,'MM'), count(*) FROM x GROUP BY TRUNC(date_col,'MM') HAVING count(*) > 3;
Cet exemple aidera:
select to_char(trunc(event_date,'MONTH'),'MON-YYYY') month, count('x') no_of_occurances from d1 having count('x') > 3 group trunc(event_date,'MONTH')
Oups, je n'avais pas vu le poste de Gary parmi tout le reste. J'ai voté Gary Up, ignore ce post comme c'est exactement la même chose que Gary, mais j'ai posté 12 heures plus tard. Désolé Garry.
Dans votre exemple, je suppose que vous voulez dire septembre et non novembre. Pouvez-vous nous montrer un exemple de la sortie que vous souhaitez voir?
La sortie doit être le compte et idéalement le mois. Par exemple, (août 14) s'il y a 14 enregistrements pour août de la même année. Évidemment.
S'il vous plaît ajouter une balise 'Oracle' à votre question :-D