Me parece que debido a la estructura de la tabla y como se ingresan los valores, lo tenes que resolver por programación (quizas hay alguna forma en SQL que se me escape por lo pronto). Creo que podrias plantear algo como sigue:
Código PHP:
$query = "SELECT id, hora, evento FROM Eventos WHERE id = 823";
$resultados = mysql_query($query,$conex);
$arrayaux = array();
for($i = 0; $row = mysql_fetch_row($resultados);$i++){
$banderafin=0;
switch ($row['evento']){
case 'Ingreso Empresa':
$arrayaux[]=$row['id'];
$arrayaux[]=$row['hora'];
$arrayaux[]=$row['evento'];
$banderafin = 0;
break;
case 'Ingreso al SIT':
$arrayaux[]=$row['id'];
$arrayaux[]=$row['hora'];
$arrayaux[]=$row['evento'];
$banderafin = 0;
break;
case 'Ingreso de Campaña':
if($banderafin = 0){
$arrayaux[]=$row['id'];
$arrayaux[]=$row['hora'];
$arrayaux[]=$row['evento'];
break;
}
else{
break;
}
case 'Egreso de Campaña':
if($banderafin = 1){
for($j=0;$j<$arrayaux.length;$j++){
if($arrayaux[$j] == 'Egreso de Campaña'){
$pos_id=$j;
$pos_hora=$j-1;
$pos_evento=$j-2;
}
}
$arrayaux[$pos_id]=$row['id'];
$arrayaux[$pos_hora]=$row['hora'];
$arrayaux[$pos_evento]=$row['evento'];
break;
}
else{
$arrayaux[]=$row['id'];
$arrayaux[]=$row['hora'];
$arrayaux[]=$row['evento'];
$banderafin=1;
}
break;
case 'Inicio Break - Baño':
$arrayaux[]=$row['id'];
$arrayaux[]=$row['hora'];
$arrayaux[]=$row['evento'];
$banderafin = 0;
break;
//Resto de la lógica
}
}
Sería basicamente, crear un array que almacene los eventos (con sus 3 datos) de acuerdo a cierta lógica que plantearias al recorrer los resultados a través de un switch. Como no conozco mucho las alternativas que se te pueden presentar, plantee lo siguiente:
1) Si llega un evento de ingreso a campaña y la bandera está en 0, registro los datos.
2) Si llega un evento de ingreso a campaña y la bandera está en 1, no registro los datos (dado que hubo anteriormente un evento de egreso de campaña).
3) Cuando se produce un evento de egreso y la variable bandera está en 0, registramos los datos y ponemos la bandera en 1. (Esta bandera se resetearía a 0 en cualquier otro evento que te "corte" el bloque. Por ej: Inicio break)
4) Cuando se produce un evento de egreso de campaña y la bandera está en 1, recorrés el array que estás creando y registras el último evento de egreso de campaña y guardas las posiciones de los 3 datos.
Espero haber sido más o menos claro. De todos modos deberías completar el resto de la lógica para que el array sea integro y guarde los datos como los necesitás.
Saludos!