2011-03-14 18 views
6


Quiero seleccionar el número de cuenta y el grupo por un período de tiempo (mes, semana, día, hora, ...). Entonces, por ejemplo, quiero seleccionar el número de filas y agruparlas por 24 horas.
Mi tabla se crea de la siguiente manera. La fecha es la marca de tiempo.SQL select & group por un período de tiempo (timestamp)

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


He intentado con esta consulta. Con longitud dependiendo del período de tiempo. Pero, ¿cómo puedo agruparme ahora?

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


Pero, ¿cómo puede el grupo I de la fecha a partir de ahora + time_period?

+0

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

Respuesta

17

Puede agrupar por la función TO_CHAR.

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

... donde X es la especificación de formato:

  • AAAA = 4 dígitos Año
  • MM = Mes del año
  • DD = Día en el mes
  • WW = Semana
  • HH24 = Hora del día

Puede combinarlos como quiera