Tengo una tabla MySQL con llamadas telefónicas. Cada fila significa una llamada telefónica. Las columnas son:Datos MySQL - Contar el número de llamadas telefónicas al mismo tiempo
start_time
start_date
duration
que necesita para obtener un máximo de llamadas telefónicas llamadas al mismo tiempo. Es por el dimensionamiento de la central telefónica.
Mi solución es crear dos columnas timestamp timestamp_start
y timestamp_end
. Luego ejecutar un segundo bucle por segundo, día a día y pido MySQL algo como:
SELECT Count(*) FROM tbl WHERE start_date IN (thisday, secondday) AND "this_second_checking" BETWEEN timestamp_start AND timestamp_end;
Es bastante lento. ¿Existe una solución mejor? ¡Gracias!
EDITAR - Utilizo esta solución y me da los resultados adecuados. Se utiliza la capa SQL dibi - http://dibiphp.com/cs/quick-start.
$starts = dibi::query("SELECT ts_start, ts_end FROM " . $tblname . " GROUP BY ts_start");
if(count($starts) > 0):
foreach ($starts as $row) {
if(isset($result)) unset($result);
$result = dibi::query('SELECT Count(*) FROM ' . $tblname . ' WHERE "'.$row->ts_start.'" BETWEEN ts_start AND ts_end');
$num = $result->fetchSingle();
if($total_max < $num):
$total_max = $num;
endif;
}
endif;
echo "Total MAX: " . $total_max;
solo necesita comprobar cuando se inicia una nueva llamada para saber cuántas se están ejecutando, no es necesario verificar cada segundo – Blem
¿Tiene índices en start_date, timestamp_start y timestamp_end? – pgl
Sí, tengo índices. Fue una gran mejora. Blem: ¡Lo pienso, gracias! – Xdg