2011-03-14 6 views
6


Je souhaite sélectionner le nombre et le groupe par période (mois, semaine, jour, heure, ...). Donc, par exemple, je veux sélectionner le nombre de lignes et les grouper par 24h.
Ma table est créée comme suit. La date est l'horodatage.Sélection SQL et groupe par période (horodatage)

CREATE TABLE MSG 
(
    MSG_ID decimal(22) PRIMARY KEY NOT NULL, 
    MSG_DATE timestamp, 
    FILE_REF varchar2(32), 
    FILE_NAME varchar2(64), 
    MSG_TYPE varchar2(2), 
); 
CREATE UNIQUE INDEX PK_FEI_MSG ON MSG(MSG_ID); 


J'ai essayé avec cette requête. Avec la longueur en fonction de la période de temps. Mais comment puis-je regrouper à partir de maintenant.

SELECT substr(MSG_DATE, 1,length),COUNT(*) as total FROM MSG GROUP BY substr(MSG_DATE, 1, length) 


Mais comment puis-je groupe la date à partir de maintenant + TIME_PERIOD?

+0

voir http://stackoverflow.com/search?q=group+day –

Répondre

17

Vous pouvez regrouper par la fonction TO_CHAR.

select to_char(msg_date, 'X') 
     ,count(*) 
    from msg 
group 
    by to_char(msg_date, 'X') 

... où X est la spécification de format:

  • AAAA = 4 chiffres Année
  • MM = mois de l'année
  • DD = jour du mois
  • WW = Semaine
  • HH24 = Heure de la journée

Vous pouvez les combiner à peu près comme vous le souhaitez