rango por horas funciones elementos ejemplos datos consultas agrupar agrupamiento agrupadas agrupacion agregacion sql mysql datetime group-by

por - funciones de agrupamiento en sql



Grupo de consulta mysql por intervalos de 15 minutos (6)

Adaptación del enfoque 1) a continuación:

select Round(date_format(date, "%i") / (15*60)) AS interval from table group by interval

Adaptación del enfoque 3) a continuación:

SELECT Round(Convert(substring(date_column, 14, 2), UNSIGNED) / (15*60)) AS interval /* e.g. 2009-01-04 12:20:00 */ FROM table GROUP BY interval;

Algunos enfoques que he encontrado here :

1)

select date_format(date, "%W") AS `Day of the week`, sum(cost) from daily_cost group by `Day of the week` order by date_format(date, "%w")

2)

select count(*) as ''count'', date_format(min(added_on), ''%Y-%M-%d'') as ''week commencing'', date_format(added_on, ''%Y%u'') as ''week'' from system where added_on >= ''2007-05-16'' group by week order by 3 desc;

3)

SELECT substring(postdate, 1,10) AS dd, COUNT(id) FROM MyTable GROUP BY dd;

(También aquí: http://www.bradino.com/mysql/dayparting-on-datetime-field-using-substring/ )

EDITAR: todas las soluciones funcionarán mal en una tabla con una gran cantidad de registros.

Tengo un sistema de monitoreo que recolecta datos cada n segundos (n ~ = 10 pero varía). Me gustaría agregar los datos recopilados en intervalos de 15 minutos. ¿Hay alguna forma de acorralar la columna de la marca de tiempo en trozos de 15 minutos para permitir que la agrupación funcione?


Empecé con la respuesta dada anteriormente por unutbu pero no obtuve lo que necesitaba y tuve que agregarle un poco.

Select Created, from_unixtime(FLOOR(UNIX_TIMESTAMP(Created)/(15*60))*(15*60)) GroupTime, COUNT(*) as Cnt FROM issue i GROUP BY GroupTime

Este código se divide por los 900 segundos en un lapso de 15 minutos, luego refuerza el valor y lo multiplica por 900, esencialmente redondeando al incremento de 15 minutos más cercano.


Esto funcionó para mí

mysql> **SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())- UNIX_TIMESTAMP(NOW())%(15*60));** +---------------------------------------------------------------------+ | FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())- UNIX_TIMESTAMP(NOW())%(15*60)) | +---------------------------------------------------------------------+ | 2012-02-09 11:15:00 | +---------------------------------------------------------------------+ 1 row in set (0.00 sec)


La consulta agrupa las filas y crea marcas de tiempo a intervalos de 15 minutos.

Select concat( date(created_dt) , '' '', sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))as created_dt_new from table_name group by created_dt_new


Por ejemplo, Timestamps
2016-11-09 13:16:29
2016-11-09 13:16:49
2016-11-09 13:17:06
2016-11-09 13:17:26
2016-11-09 13:18:24
2016-11-09 13:19:59
2016-11-09 13:21:17

Se agrupan en 2016-11-09 13:30:00

  1. sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))
    Tiempo de límites superiores al intervalo de 15 minutos más cercano. por ejemplo, 12:10 -> 12:15

  2. concat( date(created_dt) , '' '', sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))
    Genera una marca de tiempo tomando la fecha del campo de marca de tiempo.


Pruebe esto, agrupando registros de intervalos de 15 minutos, puede cambiar 15 * 60 por el intervalo en segundos que necesita

SELECT sec_to_time(time_to_sec(datefield)- time_to_sec(datefield)%(15*60)) as intervals from tablename group by intervals


SELECT FLOOR(UNIX_TIMESTAMP(timestamp)/(15 * 60)) AS timekey FROM table GROUP BY timekey;