Предполагая таблицу, такую как:
UID Name Datetime Users
4 Room 4 2012-08-03 14:00:00 3
2 Room 2 2012-08-03 14:00:00 3
3 Room 3 2012-08-03 14:00:00 1
1 Room 1 2012-08-03 14:00:00 2
3 Room 3 2012-08-03 14:15:00 1
2 Room 2 2012-08-03 14:15:00 4
1 Room 1 2012-08-03 14:15:00 3
1 Room 1 2012-08-03 14:30:00 6
1 Room 1 2012-08-03 14:45:00 3
2 Room 2 2012-08-03 14:45:00 7
3 Room 3 2012-08-03 14:45:00 8
4 Room 4 2012-08-03 14:45:00 4
Я хотел получить среднее количество пользователей каждой комнаты (1,2,3,4) с момента времени 2 вечера до 3 вечера. Проблема в том, что иногда комната не может "заходить" на 15-минутный интервал времени, поэтому необходимо сделать предположение о том, что предыдущий последний пользовательский счет все еще действителен.
Например, регистрация для комнаты 2012-08-03 14:15:00
номер 4 никогда не проверялась, поэтому следует предположить, что в комнате 4 было 3 пользователя в 2012-08-03 14:15:00
, потому что это то, что у него было при 2012-08-03 14:00:00
Это следует за тем, чтобы средний счетчик пользователей, который я искал, выглядит следующим образом:
Комната 1: (2 + 3 + 6 + 3)/4 = 3,5
Номер 2: (3 + 4 + 4
+ 7)/4 = 4,5
Комната 3: (1 + 1 + 1
+ 8)/4 = 2,75
Комната 4: (3 + 3
+ 3
+ 4)/4 = 3,25
где #
- это предполагаемое число, основанное на предыдущей известной регистрации.
Мне интересно, возможно ли это с помощью SQL? если нет, мне любопытно гениальное PHP-решение, которое не просто математическое выражение bruteforce, как, например, мой быстрый неточный псевдо-код:
foreach ($rooms_id_array as $room_id) {
$SQL = "SELECT * FROM `table` WHERE (`UID` == $room_id && `Datetime` >= 2012-08-03 14:00:00 && `Datetime` <= 2012-08-03 15:00:00)";
$result = query($SQL);
if ( count($result) < 4 ) {
// go through each date and find what is missing, and then go to previous date and use that instead
} else {
foreach ($result)
$sum += $result;
$avg = $sum / 4;
}
}