8
votes

Compte SQL pour une colonne Date

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.

par exemple: xxx

Ceci ne doit pas renvoyer aucune valeur. Parce qu'il n'a pas le nombre nécessaire de répétitions.

mais cela il fait: xxx

pour le mois de novembre.

Est pour un dB oracle.


3 commentaires

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


9 Réponses :


-2
votes

Peut être faux mais une supposition: xxx


1 commentaires

Non, la somme des dates supérieures à 3 doit également correspondre au même mois.



0
votes

Ceci devrait fonctionner pour MySQL et MSSQL:

SELECT MONTH(date), Sum(MONTH(date))
FROM table
GROUP BY date
HAVING Sum(MONTH(date)) > 3


0 commentaires

7
votes
SELECT
 COUNT(date)
 , TRUNC(DATE,'MON')
FROM TABLE
GROUP BY TRUNC(DATE,'MON')
HAVING COUNT(DATE) > 3

3 commentaires

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.



1
votes

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)


0 commentaires

0
votes

Je ne suis pas sûr de la base de données que vous utilisez.

dans la requête MySQL sera similaire à la méthode proposée par @then

sur SQL Server Vous avez d'autres possibilités intéressantes.

Lire le ce Article < / a> pour plus de détails.


0 commentaires

1
votes

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)


0 commentaires

0
votes

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


0 commentaires

3
votes
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;

0 commentaires

1
votes

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') 


1 commentaires

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.